bashOnWindows

نحوه نصب اپنفوم روی ویندوز ۱۰

ُسلام!

طبق یک نظرسنجی که در گروه تلگرامی سایت برگزار شد، تصمیم بر این شد که در این پست آموزش “نحوه نصب اپنفوم روی ویندوز ۱۰” رو داشته باشیم. خوشبختانه بعد از مدت ها سایت رسمی اپنفوم به صورت رسمی نحوه نصب اپنفوم رو در ویندوز ۱۰ قرار داد. فقط باید دقت کنید که این کار فقط روی ویندوز ۱۰ امکان پذیر هست و فعلا آپدیتی برای ویندوزهای دیگه برای داشتن این قابلیت ارائه نشده. در واقع ویندوز ۱۰ قابلیتی پیدا کرده (البته نه در ورژن های قدیمیش) که می تونید به وسیله اون، Terminal اوبونتو رو در ویندوز خودتون داشته باشید. داشتن Terminal برای یک “لینوکس گیک” (!) به معنی در اختیار داشتن تمام امکانات سیستم عامل لینوکس هست! 🙂

افراد خیلی زیادی شاید مشکل در نصب لینوکس به صورت Dual Boot با ویندوز داشتند و یا به هر دلیلی نمی خواستند لینوکس رو نصب بکنند. این افراد مجبور بودند تا اوبونتو رو به صورت مجازی در سیستم خودشون نصب بکنند و بعد اپنفوم رو روی اون نصب کنند. این کار باعث کاهش فوق العاده زیاد سرعت اوبونتو میشد و عملا کار با اپنفوم رو خیلی سخت میکرد. اما با این عرضه سایت اپنفوم، میشه خیلی راحت و با سرعت بالا کیس های اپنفوم رو ران کرد. طبق ادعای سایت اپنفوم، تغییر محسوسی در سرعت این نسخه با نسخه لینوکسی وجود نداره. البته که من بازهم نسخه لینوکسی رو ترجیح میدم! به خاطر خیلی دلایل که شاید بعدا بهشون اشاره کردیم 😉

یک نکته همون اول کار بگم که این کار نیاز به دانلود داره! اونطور که من تخمین زدم شما باید نزدیک به ۴۶۰ مگابایت (شاید هم بیشتر) از اینترنت دیتا دانلود کنید. البته در این عدد، حجم اپنفوم هم حساب شده. خب کار رو شروع می کنیم:

در مرحله اول شما باید مطمئن بشید که آیا نسخه ویندوز ۱۰ شما قابلیت اضافه کردن ترمینال لینوکس رو به خودش داره یا خیر. برای این کار وارد محیط برنامه Settings ویندوز بشید:

و بعد از داخل اون، وارد قسمت System بشید:

حالا تو اینجا Build مربوط به ویندوز خودتون رو پیدا کنید:

اگر این مقدار طبق گفته سایت ماکروسافت از ۱۴۳۱۶ بیشتر باشه، ویندوز شما قابلیت مورد نظر رو داره و می تونید ادامه بدید. در غیر این صورت باید برید و از قسمت Update Windows این قابلیت رو دانلود و نصب کنید. آپدیتی که باید دنبالش باشید نامش Feature update to Windows 10, version 1607 هست.

خب حالا اگر مورد بالا، مشکلی نداشت ادامه کار رو به این صورت طی می کنیم. شما باید برید و این قابلیت رو در ویندوز خودتون فعال کنید. برای این کار دوباره وارد قسمت Settings بشید، ولی این بار به قسمت Updates & Security برید. حالا در این قسمت روی قسمت For Developers کلیک کنید و گزینه Developer Mode رو انتخاب کنید:

احتمالا با انتخاب این گزینه به شما میگه که ویندوز شما احتیاج به یک رستارت داره. ویندوز رو رستارت کنید. بعد از انجام این کار حالا به Control Panel سیستم برید و وارد قسمت Programs بشید.

در این قسمت Turn Windows Features On or Off رو انتخاب کنید:

در این صورت پنجره ای باز خواهد شد که به شما اجازه میده یک سری از قابلیت های ویندوز رو روشن/خاموش کنید. در گزینه های آخر، گزینه مربوط به Windows Subsystem for Linux (Beta) رو فعال کنید و کامپیوتر رو رستارت کنید:

بعد از رستارت این قابلیت به ویندوز شما اضافه شده و شما می تونید با باز کردن Start Menu و تایپ Bash برنامه Bash on Ubuntu on Windows رو مشاهده و باز کنید:

حالا ترمینال لینوکس در اختیار شماست! 🙂 وقتی برای اولین بار این برنامه رو باز می کنید از شما می خواد تا دانلود اوبونتو روی ویندوز رو تایید کنید. در واقع یک اوبونتوی کوچک روی سیستم شما همراه با همه فایل های ضروری نصب خواهد شد. برای ادامه کار باید حرف Y رو وارد کنید و Enter بزنید:

با انجام این کار دانلود شروع خواهد شد و اگر سرعت پایینی دارید، کمی حوصله کنید؛ شاید نزدیک به یک ساعت. بعد از اتمام دانلود، ویندوز پیغامی مبنی بر رستارت خواهد داد، اما فعلا رستارت نکنید! اجازه بدید تا Bash کاملا نصب و ستاپ بشه. در پایان می بینید که از شما یک اسم User و Password برای اوبونتو میپرسه. نام User رو وارد کنید (که میتونه هر اسمی باشه) و بعد دو بار به ترتیبی که خواسته شده Password رو وارد کنید. البته در ورژن های قدیمیتر ویندوز  مرحله آخر یعنی وارد کردن نام کاربری و رمز عبور نشون داده نمیشه و شما با عنوان کاربر root به لینوکس معرفی خواهید شد. با اتمام این مرحله، پیغامی مبنی بر اتمام مراحل نصب در ترمینال برای شما نشون داده میشه و شما می تونید دستورات Bash رو وارد کنید:

حالا رایانه رو رستارت کنید. 🙂 خب تا اینجا مرحله نصب ترمینال Bash به پایان رسیده و می تونیم کار رو برای نصب اپنفوم و پاراویو ادامه بدیم. اما قبلش یک نکته کوچک: شاید این سوال برای شما هم پیش بیاد که الان پوشه HOME لینوکس کجای کامپیوتر شماست؟ این پوشه رو می تونید در آدرس زیر پیدا کنید:

که در واقع همون اینجاست:

Username هم نام کاربری شما در ویندوز هست. برای نصب اپنفوم کافیه از دستورات همیشگی نصب اپنفوم استفاده کنید. یعنی:

دقت کنید که در اینجا برای کپی پیست کردن شاید با کمی مشکل مواجه بشید. برای پیست کردن داخل ترمینال کافیه فقط یکبار از راست کلیک موس استفاده کنید. اگر دیدید با انجام این کار یک سری حروف بی مفهوم در ترمینال پیست شد، نگران نباشید. کافیه یکبار تکست مربوطه رو داخل یک Notepad پیست کنید و دوباره از اونجا به ترمینال کپی کنید. در این صورت مشکل حل خواهد شد. باز هم نشد؟ ;/ حتما زبان ویندوز روی “فا” قرار گرفته. اون رو En کنید تا مشکل حل بشه 😉 خلاصه بعد از همه اینها و اجرای دستورات بالا نزدیک به ۳۱۳ مگابایت برای اپنفوم نسخه ۴ دانلود خواهد شد.

احتمال داره در میانه نصب خطای Unable to Fetch… بده و متوقف بشه. کافیه دوباره دستور نصب اپنفوم رو وارد کنید. دقت کنید که در این صورت حتما فقط باید دستور آخر از چهار دستور بالا رو اجرا کنید. اگر باز هم نشد، اینترنت خودتون رو عوض کنید و دوباره امتحان کنید. کار نشد نداره 😉

وقتی دانلود و نصب اپنفوم تمام شد، مراحل همیشگی پایانی رو انجام بدید:

و بعد:

فینیشد، حالا نصب اپنفوم شما تکمیل شده ولی فعلا یک قدم به انتهای مسیر مونده. در ادامه کار لازمه تا نرم افزاری رو روی ویندوز نصب کنیم تا بتونه نرم افزارهای گرافیکی لینوکس رو برای ما اجرا کنه. تابحال گمبیت نصب کردید؟ Exceed هم باهاش نصب کردید، درسته؟ نرم افزار Exceed در واقع نرم افزار تبدیل محیط لینوکسی گمبیت به ویندوز هست. بله بله! گمبیت مخصوص لینوکسه 🙂 آموزش نصب اون رو هم روی لینوکس خواهیم داشت ;). خب برای این کار شما باید نرم افزاری به نام Xming رو از آدرس زیر دانلود، نصب و بعد اجرا کنید:

بعد از اجرا، دوباره وارد محیط ترمینال بشید. حالا باید تنظیم کنیم که در صورت باز شدن نرم افزار پاراویو، این نرم افزار از Xming برای نمایش محتوای گرافیکی خودش استفاده بکنه. پس بنابراین این کار رو هم انجام بدین:

نصب نرم افزار تموم شده و می تونید از اپنفوم استفاده بکنید. برای شروع پوشه run رو تولید کنید و tutorials رو داخلش کپی کنید:

و حالا ران کردن اولین کیس:

که در نهایت:

هَو فان 🙂

telegram-group

راه اندازی کانال تلگرام و ایجاد تغییرات

بعد از مدت ها دوباره سلام.

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

اما در این پست می خوایم اعلام کنیم که گروه تلگرامی سایت راه اندازی شد و شما می تونید ازین به بعد در گروه سوالات خودتون رو مطرح بکنید. صفحه پرسش و پاسخ قبلی سایت رو حذف کردیم چرا که کارایی لازم رو در مقابل گروه تلگرامی نداشت. در گروه تلگرامی اهداف متعددی رو دنبال خواهیم کرد:

– اشتراک گذاری تجربیات در زمینه CFD
– توسعه نرم افزارهای متن باز از جمله OpenFOAM
– تهیه آموزش، مستند سازی و بایگانی تجربیات در قالب پکیج های آموزشی
– رفع مشکلات CFD
– تشکیل کارگروه های مطالعاتی
– استخدام و فرصت های شغلی مهندسین شبیه سازی

همچنین:

– دوستان هر مشکلی در زمینه CFD، OpenFOAM و یا نرم افزارهای دیگه داشته باشند می تونند مطرح کنند. تمرکز بیشتر روی نرم افزار OpenFOAM هست.
– به مرور اقدام به تشکیل کارگروه های مطالعاتی در زمینه های خاص خواهیم کرد و یک بانک اطلاعاتی در همان زمینه توسط دوستان علاقه مند تولید خواهد شد.
– نتیجه این کارگروه ها حل مسائل/بنچمارک های معمول و پیچیده و در عین حال توسعه/کدنویسی نرم افزار OpenFOAM خواهد بود.

برای عضویت در گروه لطفا روی عکس زیر کلیک کنید:

همچنین برای عضویت در کانال تلگرامی شرکت سیمیکو و با خبر شدن از اخبار و مطالب CFD می تونید روی عکس زیر کلیک کنید:

به زودی با پست های جدید با شما خواهیم بود …
درود.

of_course

دوره آموزش ویدئویی اپنفوم

خوشبختانه تیم سیمیکو شروع به برگزاری دوره کامل آموزشی نرم افزار اپنفوم به صورت ویدئویی و آنلاین کرده است. این دوره تمامی مطالب مقدماتی و متوسطه اپنفوم را در بر خواهد داشت و امیدواریم که تاثیر خوبی در روند پیشرفت نرم افزار متن باز اپنفوم در کشور داشته باشد.

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

برای استفاده از این دوره به این صفحه مراجعه کنید.

contract

راه اندازی بخش ثبت درخواست

سلام!

خوشبختانه از امروز قسمت ثبت درخواست سایت راه اندازی شد. شما از امروز به بعد می تونید با مراجعه به این قسمت و ثبت انواع درخواست در زمینه CFD، تمام نیازهای خودتون رو برطرف کنید. شما قادرید تا هر نوع درخواستی در زمینه CFD داشته باشید. درخواست ها توسط تیم سیمیکو بررسی و ارزیابی میشند. بعد با شما تماس گرفته شده و در مورد ادامه کار صحبت می کنند. شرکت سیمیکو تیم قدرتمندی متشکل از اساتید هیئت علمی، دانشجویان دکتری، کارشناسی ارشد و کارشناسی رو در اختیار داره که می تونه به بهترین نحو نیازهای شما رو در زمینه CFD برطرف کنه. به زودی با این تیم بیشتر آشنا خواهید شد ;). باید اشاره کنیم که در این قسمت، علاوه بر نرم افزار اپنفوم، تمامی نرم افزارهای CFD دیگه هم مد نظر قرار داده شده اند؛ بنابراین هیچ محدودیتی از نظر نرم افزاری وجود نداره. می تونید هر نوع درخواستی رو برای هر نرم افزاری داشته باشید. حتی درخواست ورکشاپ های آموزشی، درخواست کدنویسی به زبان های مختلف و غیره.

انواع درخواست ها:

  • طراحی حلگرهای جدید: طراحی حلگرها برای حل مسائل مختلف و معادلات جدید مخصوصا در اپنفوم چیزی هست که امروزه بسیار بهش نیاز هست.
  • اضافه کردن مدل های جدید: در بسیاری از اوقات لازم هست که شما مدل های جدیدی رو به مساله خودتون اضافه بکنید. مثلا اضافه کردن یک مدل توربولانسی جدید، تعریف یک شرط مرزی جدید، اضافه کردن یک مدل تشعشعی جدید و غیره.
  • شبکه بندی: بحث شبکه و کیفیت اون از جمله مباحثی هست که باید خیلی بهش توجه کرد. کیفیت شبکه اونقدر مهم هست که نزدیک به ۶۰ تا ۷۰ درصد از زمان یک متخصص CFD رو به خودش اختصاص میده. در اینجا متخصصین می تونند بهترین کیفیت برای انواع شبکه (ساختاریافته و یا غیر ساختاریافته همراه با شبکه های لایه مرزی) رو برای شما مهیا کنند.
  • UDF: بحث UDF نویسی در فلوئنت، باعث میشه تا شما به ابزارهای بسیار بیشتری برای بررسی مسائل خودتون دسترسی داشته باشید.
  • ویدئوهای آموزشی: یکی از مهمترین ابزارهای آموزشی ویدئو هست. شما می تونید انواع ویدئوی آموزشی مورد نیاز خودتون در با انتخاب این گزینه درخواست کنید.
  • اسناد آموزشی: اگر نیاز به فایل های متنی و عکس برای یاد گرفتن مطالب دارید، می تونید از این گزینه استفاده کنید.
  • پروژه های صنعتی و همکاری های آکادمیک: اگر به دنبال انجام کامل یک پروژه تمام عیار CFD توسط متخصصین این زمینه هستید، پس معطل نشید! پروژه خودتون رو با اطمینان خاطر به تیم سیمیکو بسپارید.
  • برگزاری ورکشاپ: تیم سیمیکو این قابلیت رو داره که در تمامی دانشگاه های کشور برای شما، همکلاسی ها و یا همکاران شما، ورکشاپ ها و دوره های CFD برگزار بکنه. این تیم قادر به تشکیل کلاس برای هر نوع آموزشی شامل نرم افزارهای اپنفوم، فلوئنت، سی اف ایکس، کامسول، استار سی سی ام و غیره هست. قیمت خوب در مقابل کیفیت خوب!
  • از این به بعد شما می تونید از صفحه اول سایت، در زیر قسمت پست های اخیر، به بخش ثبت درخواست دسترسی داشته باشید. همچنین لینک صفحه در منوی اصلی سایت نیز قرار داده شده.

به امید ارتقای دانش CFD و استفاده عملی از این دانش مفید در کشور.

of4

انتشار نسخه ۴٫۰ اپنفوم

نسخه ۴٫۰ اپنفوم در روز ۲۸ ژوئن ۲۰۱۶ منتشر شد. برخلاف بقیه نسخه های اپنفوم، شماره این نسخه فقط از دو رقم تشکیل شده. شماره اول (۴) Major Version و شماره دوم (۰) Patch Version هست. بیش از حدود ۹۰۰ تغییر در این نسخه از اپنفوم نسبت به نسخه قبلی اعمال شده. همین موضوع باعث شده در بعضی از مثال ها نحوه تنظیم مساله با نسخه ۳ متفاوت باشه و در نتیجه نمی توان در این مثال ها از همان فایل های نسخه ۳ استفاده کرد. البته که با تغییر جزئی در فایل های نسخه های قبلی می توان آنها را به نسخه ۴ تبدیل کرد. مثل همیشه این نسخه از اپنفوم نیز به دو صورت Pre-compiled Package و Source Code منتشر شده. در زیر مهمترین تغییرات و اضافات در این نسخه از اپنفوم آورده شده. برای مشاهده لیست کامل به اینجا مراجعه کنید.

  • مدیریت کیس
    – ابزار foamDictionary برای تغییر یا اضافه کردن دیکشنری ها درون فایل ها توسط Command Line
    – ابزار foamListTimes برای لیست کردن همه پوشه های زمان به جز زمان ۰٫ مهمترین کاربرد این دستور پاک کردن این زمان ها توسط دستور foamListTimes -rm هست که در Automation بسیار به درد بخور هست.
  • پردازش در حین حل و پس پردازش
    – استفاده از نرم افزار پس پردازش Paraview نسخه ۵
    – انجام اعمال پس پردازش و در حین حل پردازش، توسط Command Line:‌ اپنفوم اخیرا تمامی دستورات مربوط به پس پردازش رو در چند ابزار جامع و کامل جمع کرده که می توان سریع تر و حرفه ای تر این کارها رو انجام داد. برای اطلاعات بیشتر به اینجا مراجعه کنید.
  • شرایط مرزی
    – شرط مرزی fixedProfile برای در نظر گرفتن یک پروفیل یک بعدی در ورودی جریان از روی داده های تجربی
    – شرایط مرزی وابسته به زمان: استفاده از پارامتر زمان در شرایط مرزی TimeVarying. برای انجام این کار قبلا باید از Swak4Foam استفاده میشد.
  • دینامیک جسم صلب
    – کتابخانه جدید برای اجسام با n درجه آزادی به صورت موازی
    – کتابخانه جدید برای حرکت شبکه برای چندین جسم صلب همراه با مفاصل و قید و بندها
  • دیگر مدل ها و قابلیت ها
    – اضافه شدن مدل آشفگی جدید kOmegaSSTDES
    – اضافه کردن چشمه به معادلات آشفتگی توسط fvOptions
    مدیدیرت نرم افزار و توسعه آن
    – راحت تر شدن آپدیت کردن نسخه Source نرم افزار با Allwmake -update
    – آپدیت شدن User Guide اپنفوم
  • کارکرد
    – بهبود کدهای Decompose و Recunstruct در حل موازی. اضافه شدن نسخه موازی ابزار mapFields به نام mapFieldsPar
SFO_post

پروژه SFO (StarCCM+ Fluent OpenFOAM)

با سلام خدمت دوستان.

در این پست قصد معرفی یک پروژه بسیار مفید رو دارم که به صورت آنلاین توسط آقای دکتر تیمور جواهرچی از دانشگاه واشنگتن ارائه شده. ایشون توسط تیمی، آموزش هایی رو در رابطه با سه نرم افزار دینامیک سیالات محاسباتی (StarCCM+ و Fluent و OpenFOAM) به صورت آنلاین در سایت Jupyter قرار دادند و همه می تونند به صورت رایگان از این آموزش های بسیار مفید استفاده کنند.

sfoبه لطف جناب دکتر جواهرچی، من هم به عنوان کوچکترین عضو این تیم، آموزشی رو در رابطه با نرم افزار OpenFOAM (مساله جریان حول استوانه در حال چرخش) به صورت آنلاین تدوین کردم. شما می تونید برای مشاهده همه آموزش های این پروژه به اینجا مراجعه کنید.

هر آموزش شامل چهار مرحله هست. این مراحل به ترتیب زیر هست:

۱- فیزیک مساله

۲- هندسه و شبکه بندی

۳- تنظیمات مربوط به شبیه سازی

۴- پس پردازش و نتایج

به امید خدا آموزش های بیشتری در رابطه با هر سه نرم افزار طی مدت زمان توسط این تیم اضافه خواهد شد که می تونید استفاده بکنید. لینک صفحه اصلی پروژه SFO به صورت دایمی در قسمت چپ سایت قرار داده شده تا بتونید در هر زمان به راحتی به آموزش ها دسترسی داشته باشید.

با تشکر از آقای دکتر جواهرچی که چنین گنجینه ارزشمندی رو برای همه CFD کارها تهیه کردند.

درود.

warning

مشکل سرعت پایین سایت

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

از لطف شما که همچنان با وجود سرعت پایین سایت، به ما سر می زنید بسیار ممنونم.

coffee

How to sense in CFD

چگونه در CFD به جواب درست برسیم؟ قسمت سوم: Monitoring

[su_label type=”important”]تست شده در همه نسخه ها[/su_label]

در قسمت سوم و شاید آخرین قسمت از سری پست های “چگونه در CFD به جواب درست برسیم؟” به اهمیت Monitoring در CFD و همچنین نحوه انجام این کار در اپنفوم می پردازیم.

مانیتورینگ یعنی مشاهده لحظه به لحظه یک مقدار در حین حل CFD نسبت به زمان مساله. برای مثال فرض کنید شما در حال حل جریان حول یک استوانه هستید. همونطور که می دونید، در رینولدزهای بالاتر از حدود ۴۷ در پشت استوانه گردابه های فون کارمن تشکیل میشه. اما اگر تابحال این شبیه سازی رو در CFD انجام داده باشید، متوجه خواهید شد که چنین اتفاقی در ابتدای حل رخ نمیده. ابتدا جریان به سیلندر برخورد می کنه، سپس دو گردابه بزرگ حبابی شکل به صورت متقارن در پشت استوانه تشکیل میشند و در نهایت به تدریج با انحراف یکی از این حباب ها، فرآیند تشکیل گردابه ها شروع میشه. اگر شما قبل از شروع تشکیل گردابه ها حل رو متوقف بکنید، یعنی به چیزی می خواستید، هنوز دست پیدا نکردید. پس چطور می تونیم در حین حل ببینیم که آیا تشکیل گردابه ها آغاز شده یا نه. آیا هنوز باید حل رو ادامه بدیم؟

مانیتورینگ انواع مختلفی داره. از مانیتورینگ ضرایب نیرو گرفته تا مقدار نقطه ای یک پارامتر در میدان و یا مینیموم و ماکزیموم یک مقدار در یک قسمت از میدان. اپنفوم کتابخانه های بسیار خوبی در این زمینه داره. مانیتورینگ در حقیقت یک قسمت از کتابخانه های اپنفوم به نام Function Object رو تشکیل میده. این توابع از تنوع بسیار خوبی در اپنفوم استاندارد برخوردار هست. لیستی از این توابع رو می تونین در اینجا مشاهده کنید. همونطور که می بینید جدول اول مربوط به مانیتورینگ هست.

برای انجام مانیتورینگ شما لازم هست تا کدهایی رو به انتهای فایل controlDict کیس خودتون اضافه بکنید. در اینجا دو تا از معروف ترین این توابع رو معرفی میکنیم: Probes و forceCoeffs. تابع اول برای مشاهده مقدار نقطه ای یک پارامتر در میدان و تابع دوم برای مشاهده ضرایب نیرو مورد استفاده قرار میگیره.

فرض کنید شما در حال بررسی جریان حول یک ساختمان هستید. از طرفی می خواهید ببینید که کی جریان به حالت پایا می رسد. کافیست چند نقطه در آشفته ترین قسمت جریان (که معمولا در قسمت Wake قرار دارد) قرار بدید. اگر این نقطات به حالت پایا برسند به احتمال زیاد نقاط دیگر نیز پایا خواهند بود. مثلا فرض کنید مختصات این نقطات برابر با (۰ ۱۰ ۲۰) و (۰ ۱۲ ۲۰) هست. در این صورت ما می تونیم یک تابع برای بررسی پارامترهای U و p در این نقطه ایجاد کنیم:

می بینید که تعریف بسیار سادست. کافیست کد بالا را به فایل controlDict خود اضافه کنید. حالا اگر مساله خودتون رو ران بگیرید پوشه ای به نام postProcessing در کیس ایجاد خواهد شد که حاوی اطلاعات مورد نیاز شما نسبت به زمان است. مثلا:

شما می تونید این داده ها را با استفاده از gnuplot رسم کنید. بسیار ساده. یک اسکریپت gnuplot آماده کنید و کد زیر را داخل آن قرار بدید. اسم فایل رو هم مثلا بگذارید plot.

حالا خیلی راحت از کیس اصلی دستور زیر رو در حین حل (از یک ترمینالی به غیر از ترمینالی که در حال ران کردن مساله شماست) نمودار رو رسم کنید:

می بینید که در حین حل، نمودار برای شما رسم خواهد شد. هروقت نمودار به حالت ثابت و یا پریودیک رسید یعنی جریان شما در این قسمت پایا شده.

1

برای کنسل کردن نمودار باید از Ctrl+C استفاده کنید.

تابع دیگر forceCoeffs نام دارد. مساله جریان حول استوانه را که در ابتدا گفتیم به یاد بیاورید. می خواهیم ضرایب درگ و لیفت روی استوانه را مانیتور کنیم. بنابراین داریم:

کد بالا رو در داخل دیکشنری functions در فایل controlDict قرار میدیم. به مقادیر موجود در تابع توجه کنید. این مقادیر را باید حتما با توجه به مساله خودتون تغییر بدید. بعد از ران و همانند قبل و با تنظیم یک فایل اسکریپت gnuplot می تونید نمودار زیبای زیر رو بعد از یک مدت مشاهده بکنید:

2

نکته آخر اینکه شاید شما قبل از ران کردن کیس فراموش کردید تا Function Object رو در نظر بگیرید. در این صورت می تونید خیلی راحت با استفاده از دستور زیر فقط Function Object های تازه اضافه شده رو از زمان ابتدا تا انتها سریعا ران کنید. البته در این حالت شاید شما بپرسید چطور با عدم تمام شدن حل و عدم وجود اطلاعات در دسترس، اپنفوم قصد استخراج اطلاعات مربوط به هر تایم استپ را دارد؟ اتفاقا حق با شماست. اپنفوم چنین کاری نمی تونه انجام بده. اپنفوم فقط اطلاعات مربوط به گام های زمانی رو استخراج می کنه که در دیسک رایت شدند. Write Interval که در ControlDict یادتون هست؟

بنابراین اگر نیاز به رسم نمودار خیلی خوب دارید و Write Interval های شما در حین ران خیلی ریز نبودند، باید بگم که شما مجبورید دوباره ران بگیرید و اینبار از Function Object در ControlDict استفاده بکنید.

فینیشد. شاد باشد.

قهوه قراموش نشود 😉

coffee

residual

چگونه در CFD به جواب درست برسیم؟ قسمت دوم: رسم نمودار مانده ها توسط PyFOAM

[su_label type=”important”]تست شده در همه نسخه ها[/su_label]

در این پست به صورت خلاصه به نحوه اجرای یک حلگر همراه با رسم نمودار مانده ها می پردازیم. شاید بشه گفت در حین حل یک مساله CFD، مشاهده نمودار مانده ها مهمترین ابزار بررسی روند حل هست. این نمودار، متوسط خطای پارامترها رو در هر گام زمانی نسبت به گام زمانی قبل محاسبه و به شکل بی بعد ارائه می کنه. در نتیجه باید انتظار داشته باشیم که رفته به رفته خطاها کم شده و در نتیجه نمودار مانده ها به مقدار صفر نزدیک بشند. پایا و ناپایا بودن مساله، سادگی و پیچیدگی هندسه، مدل های استفاده شده، شبکه به کار رفته، همه از جمله عواملی هستند که روی نمودار مانده ها تاثیر گذارند. متخصصان CFD با دیدن نمودار مانده ها می توانند رفتار حلگر رو نسبت به مساله تشخیص بدند و در نتیجه تا حدودی از صحت و یا عدم صحت حل مطمئن بشند. در نرم افزارهای تجاری، این نمودار معمولا با شروع به حل، به صورت خودکار رسم میشه، اما در نرم افزارهای متن باز و به خصوص اپنفوم، این نمودار به صورت خودکار رسم نمیشه. اما راه حل آن بسیار ساده است. می توان از دو روش برای این کار استفاده کرد. روش اول استفاده از خروجی های داده شده در فایل log حلگر و روش دوم استفاده از پکیج سودمند PyFOAM که به صورت مجزا برای اپنفوم به صورت غیر رسمی منتشر میشه. روش دوم بسیار ساده تر و قوی تر از روش اول است. در نتیجه ما هم در اینجا از همین روش استفاده می کنیم.
ابتدا لازم هست که شما این ابزار رو نصب بکنید، تا در ادامه بتونیم از اون برای رسم نمودار استفاده بکنیم. قبل از نصب لازم هست شما دو پکیج از پکیج های لینوکس نصب بکنید. پکیج اول، ابزار gnuplot هست که برای رسم نمودارهای مختلف به کار میره. پکیج دوم python-numpy هست که pyFoam از اون برای محاسبات استفاده می کنه. بنابراین قبل از همه چیز:

حالا کد PyFOAM رو از این لینک دانلود بکنید و اون رو در پوشه OpenFOAM قرار بدید. البته مهم نیست که فایل در کجا قرار داشته باشه، ولی بهتر هست برای حفظ نظم اون رو داخل پوشه $HOME/OpenFOAM قرار بدیم. فایل دانلود شده شما یک فایل زیپ شده با پسوند tar.gz هست. بنابراین ابتدا فایل رو باید از حالت زیپ خارج کنیم:

و سپس با دستور زیر، PyFOAM رو نصب می کنیم:

نصب PyFOAM چند ثانیه بیشتر طول نمیکشه. بعد از نصب، شما می تونید از خیل عظیم ابزارهای PyFOAM استفاده کنید. برای دیدن ابزارهای وسیع PyFOAM می تونید به اینجا مراجعه کنید. همچنین آقای Bernhard Gschaider سازنده PyFOAM و Swak4Foam، در یک PDF بسیار کاملی ابزارهای مختلف PyFOAM رو توضیح دادند. می تونید این PDF رو هم از اینجا دانلود کنید.
اما ما برای رسم نمودار مانده از ابزار pyFoamPlotRunner.py استفاده خواهیم کرد. نحوه استفاده بسیار سادست. کافیه به جای دستورات قبلی برای اجرای حلگر، اینبار همانند زیر عمل کنیم:

می خواید پردازش موازی انجام بدید؟ مشکلی نیست:

با اجرای حلگرها توسط این ابزار، می بینید که به صورت خودکار نمودار مانده ها هم رسم خواهد شد.

شاد باشید! 🙂

winCFD

چگونه در CFD به جواب درست برسیم؟ قسمت اول: کلیات

امروز، به بررسی نحوه رسیدن به یک جواب درست در CFD و روند حل یک مساله به روش استاندارد می پردازیم. این آموزش به صورت منظم در چند بخش برای شما تنظیم شده که به مرور زمان در سایت قرار میگیره.
بسیاری از افرادی که CFD کار می کنند، نحوه درست حل یک مساله رو نمی دونند. شاید از نظر علمی در یک موضوع خاصی تخصص بسیار خوبی هم داشته باشند ولی این تخصص به هیچ وجه ضامن رسیدن به یک جواب خوب نیست. دلیل این موضوع، ناآگاه بودن شخص از نحوه انجام درست یک تحقیق مخصوصا در زمینه حساسی همچون CFD هست. به شخصه افراد بسیار زیادی رو دیدم که با گذاشتن قدم های اشتباه، با وجود داشتن دانش علمی لازم در یک موضوع خاص، هیچ گاه در CFD موفق نشدند و حتی اون رو کار بسیار طاقت فرسا و بیخودی برشمردند. در حالی که متوجه نیستند مشکل از CFD نیست، بلکه از خود آنهاست. افراد زیادی از من در مورد عدم نتیجه گرفتن در یک مساله خاص سوال می کنند و به تجربه مشاهده کردم که در اکثر مواقع، دلیل، عدم آگاهی فرد از روند استاندارد حل یک مساله هست.
به طور خیلی خلاصه مراحل انجام یک مساله به روش عددی شامل مراحل زیر هست:
۱٫ ساده سازی هندسه، شرایط مساله، شبکه با کیفیت، حل به صورت ابتدائی و پیدا کردن مشکلات فنی.
۲٫ اعمال کردن شرایط پیچیده تر که مرتبط با مساله اصلی است و پیدا کردن مشکلات فنی.
۳٫ تلاش برای صحت سنجی و مانیتورینگ مساله.
۴٫ تهیه و اجرا کردن مساله اصلی با پارامترهای مختلف.
۵٫ استخراج مناسب نتایج.
۶٫ و از همه مهمتر رعایت نظم در طول تمامی مراحل بالاست.
عمل نکردن صحیح به هرکدام از موارد فوق ممکن است منجر به عدم موفقیت کاربر شود. ساده سازی هندسه یکی از جمله قسمت هایی است که خیلی مورد توجه تازه کاران قرار نمی گیرد. معمولا تازه کاران عرصه CFD تصور می کنند یک هندسه پیچیده نشان دهنده حرفه ای بودن کار است، در حالی که این برداشت در بین CFD کاران با تجربه، مزاحی بیش نیست. هندسه باید تا آنجا که به نتایج حل اصلی (که مد نظر است) لطمه ای نزند، ساده شود. هندسه پیچیده اغلب باعث ریزتر شدن شبکه، به وجود آمدن شبکه های بی کیفیت و در نتیجه واگرا شدن سریع حلگر و یا به دست آمدن نتایج غلط پس از یک حل بسیار طولانی می شود. از طرف دیگر استفاده از یک شبکه با کیفیت در حل مساله است. فکر می کنید شبکه بندی، چند درصد از حجم یک مساله CFD را به خود اختصاص می دهد؟ از نظر افراد دارای سابقه این حجم چیزی در حدود ۶۰ تا ۷۰ درصد است. یعنی حجم عظیم کار باید روی شبکه بندی صرف شود. این مرحله هم از جمله مراحلی هست که خیلی مورد توجه افراد قرار نمی گیرد و در نتیجه بعد از حل، از نرم افزار CFD به خاطر تولید نتایج دور از واقعیت گله می کنند.

3پله پله کار کردن و به تدریج پیچیده تر کردن یک مساله، کلید طلایی حل مساله در CFD هست. هیچ گاه سعی نکنید یک مساله پیچیده که شامل چندین مدل می شود را یکباره حل کنید. فرض کنید شما می خواهید یک مساله دو فازی، متخلخل، با سیال غیر نیوتنی را حل کنید. اولین قدم تست کردن تک به تک این مدل هاست. همیشه مساله خود رو به چند بلوک تقسیم بندی کنید و روی هر بلوک جداگانه کار کنید. به این بلوک ها به صورت یک جعبه سیاه نگاه کنید. هرکدام از این بلوک ها یک ورودی و یک خروجی دارند. در نهایت بلوک ها را به هم متصل کنید تا مساله کلی حل شود. هیچ گاه تک بلوکه کار نکنید! در مساله گفته شده در بالا، در هر مرحله یک مدل را وارد کار کنید، مشکلات و خطاهای آن را (که قریب به اکثر مواقع به وجود می آیند) برطرف کنید و سپس مدل بعدی را اضافه کنید.
اما در حین حل، لازم است تا شما مساله خود را مانیتورینگ (Monitoring) کنید. این قسمت، موضوعی است که در پست های بعدی در مورد آن صحبت خواهد شد. مانیتورینگ مساله یعنی اینکه حلگر را در هنگام حل به حال خود رها نکنید! مانتورینگ شامل موارد زیر می شود:
۱٫ نمودار مانده ها
۲٫ نمودار پیوستگی
۳٫ ضرایب نیرو
۴٫ پرابینگ (Probing)
۵٫ عدد کورانت در مسائل ناپایا
۶٫ غیره بسته به مساله
در پست های بعدی سعی خواهد شد نحوه انجام مانیتورینگ به روش های بالا، یک به یک در اپنفوم توضیح داده شود.

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

6

نحوه نصب swak4Foam

در ابتدا باید بابت طولانی شدن نوشتن پست های جدید عذرخواهی کنم. امیدوارم روزی برسه بتونم سایت رو هرچه سریع تر آپلود بکنم. فکر های خوبی در سر داریم!
و اما پکیج دوست داشتنی Swak4FOAM …!
Swak4Foam مجموعه ای از ابزارهاست که قابلیت های بسیار خوبی رو به اپنفوم اضافه می کنه. این ابزار توسط یکی از خدایان اپنفوم به نام Bernhard Gschaider نوشته شده. از جمله این ابزارها میشه به شرط مرزی groovyBC و Function Object های جدید و بسیار بسیار به درد بخور و خفن (!) و ابزار دوست داشتنی funkySetFields اشاره کرد. در پست های بعدی شاید در مورد اینها بیشتر صحبت کنیم. اما شاید لازم باشه تا ابتدا در مورد نحوه نصب swak4Foam کمی صحبت کنیم. نحوه نصب خیلی سخت نیست. کافیه پکیج نرم افزار رو دانلود بکنید، از وجود پکیج های لازم در لینوکس خودتون مطمئن بشید و سپس Lets Compile !
صفحه رسمی این ابزار رو می تونید در اینجا ببینید. در قسمت Downloading انواع روش های دانلود این پکیج با SVN و Tarball و Zip گذاشته شده. ما فایل Zip رو از اینجا دانلود می کنیم و اون رو در پوشه $HOME/OpenFOAM قرار میدیم تا نصب رو شروع بکنیم. دقت کنید که نسخه ای که در بالا لینکش داده شد برای نسخه های رسمی اپنفوم هست. اگر برای نسخه extend می خواید باید فایل Zip مربوط به اون رو دانلود بکنید.
خب قبل از کمپایل لازم هست تا از وجود دو پکیج مطمئن بشید. Flex و Bison. این دو پکیج معمولا روی سیستم ها به صورت خودکار نصب هستند. می تونید با استفاده از دو دستور زیر از نصب و نسخه این پکیج ها آگاه بشید:

اما…! swak4Foam فقط با bison های نسخه پایین تر از ۳ کار می کنه. بنابراین اگر نسخه bison شما ۳ یا بیشتر هست باید ابتدا این bison رو حذف و سپس به صورت دستی bison نسخه پایین تر رو دانلود و نصب کنید. برای این کار اول bison قبلی رو حذف می کنیم:

حالا می تونید bison 2.7 رو با استفاده از دستورات زیر دانلود کنید. bison دارای دو فایل هست که هردو باید دانلود و نصب بشند:

بعد باید این فایل های دانلود شده رو که همان فایل های deb هستند، نصب کنید. یادتون باشه که فایل های deb در لینوکس همون نقش نصب کننده نرم افزارها در ویندوز رو دارند. برای نصب این فایل ها باید از دستورات زیر استفاده کنید:

والسلام! حالا وارد پوشه OpenFOAM بشید و فایل Zip دانلود شده رو که در اونجا قرار داید Extract کنید.

در نهایت داخل پوشه swak4Foam بشید:

و با ران کردن اسکریپت داخل پوشه، اون رو کمپایل کنید:

این مرحله از ۲۰ تا ۳۰ دقیقه طول میکشه. در نهایت می تونید با نوشتن دستور زیر از نصب درست مطمئن بشید:

البته که خطا میده ولی خطا نباید command not found باشه!
درود و صد درود!

mesh_resized

بازی، اپنفوم به جای بازی، ریاضی!

[su_label type=”important”]تست شده در OF 3.0.1[/su_label]

در این قسمت قصد داریم کمی از کار با اُپنفوم لذت ببریم! برای این کار تصمیم گرفتیم یک مساله دو فازی حل کنیم. در اُپنفوم ساده ترین و معروفترین حلگر دوفازی interFoam هست. در این مساله یاد خواهیم گرفت:

  • تنظیم یک مساله دو فازی در اُپنفوم و استفاده از حلگر interFoam
  • وارد کردن یک شبکه دو بعدی به اُپنفوم
  • استفاده از ابزار setFields
  • حل موازی در اُپنفوم

شاید مساله شکست سد رو در فایل های آموزشی (tutorials) اُپنفوم دیده باشید. شکست سد یک مساله بنچمارک (Benchmark) و یا همون معیار برای صحت سنجی بسیاری از مسائل دوفازی هست. می تونید این مساله رو در آدرس زیر پیدا کنید.:

اما برای حل یک مساله دوفازی قبل از هرچیز لازم هست تا شرایط اولیه و مرزی تعیین شوند. شرایط اولیه، مربوط به گام زمانی صفر می شود؛ اینکه چگونه دو فاز در ابتدا در کنار هم قرار دارند. برای این کار اُپنفوم کاران (!) از ابزار setFields استفاده می کنند. این ابزار می تواند دامنه را بر حسب مقادیر مختلف پارامترها مقدار دهی کند.

همانطور که شاید بدانید، حلگر interFoam از روش VOF یا Volume Of Fluid برای حل مسائل دوفازی استفاده می کند. این یعنی پارامتری به نام آلفا تعریف شده که مقدار آن از ۰ (فاز اول) تا ۱ (فاز دوم) در حال تغییر هست. بنابراین هرکجا از میدان که مقدار آلفا برابر با ۰ بود، بعنی در این قسمت از میدان، فاز اول قرار گرفته و مشابه همین، اگر مقدار آن ۱ بود، یعنی فاز دوم در آنجا قرار دارد. با استفاده از setFields در حقیقت کافیست همین پارامتر آلفا را در میدان مقداردهی کنیم.

در مثال حاضر، می خواهیم پاشیدن یک سیال روی کلمه OpenFOAM.ir را بررسی کنیم! شبکه مساله قبلا در نرم افزار گمبیت آماده شده و فقط در اینجا از آن استفاده خواهد شد.

mesh

شماتیک کلی مساله هم به شکل زیر هست. دقیقا در بالای کلمه OpenFOAM.ir یک قطره بزرگ سیال قرار گرفته که در زمان ۰، رها می شود. به دلیل نیروی جاذبه، قطره روی کلمه خواهد افتاد و سپس ما از این کار خود بسی لذت خواهیم برد!

schemاما برای شروع کار از همان کیس شکست سد استفاده خواهیم کرد. همانند گذشته یک کپی از این کیس که آدرس آن در بالا گفته شد، در داخل پوشه run کپی می کنیم. نام آن را هم مثلا به openfoamIr تغییر می دهیم. حال لازم هست تا شرایط مرزی و بقیه تنظیماتی را که لازم است تا مساله شکست سد به مساله حاضر تبدیل شود، انجام گیرد. مرحله اول وارد کردن شبکه به مساله است. نام شبکه، openfoamTet.msh هست. این فایل رو در داخل پوشه مساله قرار می دهیم و دستور زیر را برای تبدیل این شبکه به شبکه اُپنفوم وارد می کنیم:

دقت کنید که این یک شبکه دو بعدی است، بنابراین باید از دستور fluentMeshToFoam به جای دستور fluent3DMeshToFoam استفاده شود. با وارد کردن شبکه، اُپنفوم خود، به شبکه دو بعدی ضخامتی به اندازه یک المان می دهد و سطوح بالایی و پایینی تازه تشکیل شده آن را frontAndBackPlanes نام گذاری می کند. می توان بعد از وارد کردن شبکه، به فایل boundary آن که در پوشه polyMesh قرار گرفته، یک سری زد.

در اینجا نام شرایط مرزی که در گمبیت به مرزها داده شده، مشاهده می شود. همچنین شرط مرزی frontAndBackPlanes هم که توسط اُپنفوم اضافه شده در اینجا دیده می شود. می توان نام شرایط مرزی را به دلخواه تغییر داد. مثلا برای سادگی نام مرز frontAndBackPlanes را به frontAndBack تغییر می دهیم و فایل را ذخیره می کنیم.

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

برای سرعت:

برای فشار:

برای آلفا:

در پوشه constant تغییر خاصی نیاز نیست. فقط مثلا در این مثال مقدار کشش سطحی بین دو سیال (Sigma) برابر با ۷ در نظر گرفته شده که برای مقایسه حدود صد برابر کشش سطحی بین آب و هواست. بنابراین در فایل transportProperties:

در پوشه system، دیگر نیازی به فایل از پیش تنظیم شده blockMeshDict نیست، چرا که این فایل برای تولید شبکه مربوط به مساله شکست سد بوده. بنابراین برای تمیز شدن مساله از فایل های اضافی، این فایل را حذف می کنیم. فایل controlDict حاوی تنظیماتی از جمله مقدار گام زمانی، زمان شروع و اتمام حل است. مقدار گام زمانی را برای تست همان ۰٫۰۰۱ قرار می دهیم که از قبل برای مساله شکست سد تعیین شده بود. اما دقت کنید که در پایین گزینه ای به نام adjustTimeStep موجود است. این گزینه اگر فعال باشد، با توجه به مقدار عدد Courant ای که کاربر مد نظر دارد، به صورت خودکار و در هر گام زمانی، مقدار گام زمانی جدید را تعیین می کند. در چنین مسائلی که پایداری زیادی در مسائل دیده نمی شود، استفاده از این تکنیک باعث افزایش قابل توجه پایداری خواهد شد. معمولا فیکس کردن گام زمانی به یک عدد خاص در چنین مسائلی باعث واگرایی سریع حل خواهد شد. در واقع مقدار ۰٫۰۰۱ هم چیزی حز یک حدس اولیه نیست و به مرور زمان در حین حل، مقدار گام زمانی با توجه به عدد Co تعیین می شود. مقدار استاندارد عدد Co معمولا ۱ هست، اما برای پایداری بیشتر می توان این مقدار را تا ۰٫۱ هم کاهش داد. در بعضی مسائل دیگر که پایداری زیادی مشاهده می شود، می توان برای افزایش سرعت حل، مقدار این عدد را حتی شاید تا ۵ یا ۱۰ نیز افزایش داد. همچنین زمان نهایی حل (stopTime) نیز برابر با ۵ ثانیه در نظر گرفته شده. از طرفی برای داشتن یک انیمیشن خوب در انتهای حل، به اُپنفوم گفته شده تا در هر ۰٫۰۱۵ ثانیه از حل، یک بار نتایج را روی دیسک ذخیره کند. این مورد در کلیدواژه writeControl و writeInterval تعیین می شود.

اما قبل از حل گفته شد که باید از دستور setFields برای تعیین شرط اولیه مربوط به آلفا استفاده شود. در داخل این دستور گفته شده که همه میدان حل به جز یک ناحیه مستطیلی در بالای عبارت OpenFOAM.ir فاز دوم و در داخل این ناحیه فاز اول قرار گیرد:

اما شرط اولیه در کجا ذخیره شده است؟ در واقع عبارت internalField که در هر پارامتر موجود در پوشه ۰ قرار گرفته، همان شرط اولیه است! در اکثر مسائل اُپنفوم دیده اید که این مقدار برابر با یک مقدار ثابت در نظر گرفته شده. در واقع این همان شرط اولیه یکنواخت برای همه میدان است. مثلا در همین مثال برای فشار (واقع در پوشه ۰) اینگونه نوشته شده بود:

یعنی در شروع حل، حدس اولیه در تمام میدان برای فشار برابر با صفر در نظر گرفته شده. اما برای پارامتر آلفا این موضوع برقرار نیست. چرا که می خواهیم دقیقا در بالای عبارت OpenFOAM.ir سیال فاز دوم قرار داشته باشد. بنابراین از دستور setFields برای تنظیم internalField استفاده می کنیم. توجه کنید که نمی توان به صورت دستی مقدار هر سلول را در کلیدواژه internalField وارد کرد!

اما نکته ای که باید به آن اشاره کرد، این است که دستور setFields باعث تغییر قسمت internalField در داخل فایل alpha.water خواهد شد. اما شاید کاربر در آینده نیازی به این فایل تغییر داده شده نداشته باشد و بخواهد دوباره مساله را از صفر (با شرط اولیه یکنواخت) طور دیگری حل کند. اگر دستور setFields بدون داشتن یک کپی از فایل قبلی (alpha.water) اجرا شود، تمام تغییرات روی این فایل انجام شده و عملا فایل قبلی از بین خواهد رفت. بنابراین معمولا قبل از اعمال دستور setFields یک کپی از فایل alpha.water می گیرند و مثلا نام آن را alpha.water.org مخفف کلمه original قرار می دهند. سپس می توان با خیال راحت دستور setFields را اجرا کرد.

پس از اجرای این دستور نگاهی به فایل alpha.water بیاندازید و تغییرات ایجاد شده در این فایل را مشاهده کنید. قسمت internalField به صورت non-uniiform (غیر یکنواخت) تنظیم شده (دقیقا همان طور که می خواستیم). البته فقط قسمتی از کد در اینجا آورده شده.

خب حالا تقریبا مساله آماده حل هست، شاید بخواهید این مساله را با چند پردازنده حل کنید بنابراین کافیست فایل decomposeParDict رو به درستی بر حسب تعداد پردازنده های مورد نظر خود تنظیم کنید. مثلا در زیر این فایل برای استفاده از دو ۸ پردازنده تنظیم شده:

توجه کنید که هنگام استفاده از روش Simple حتما باید ضرب مقادیر موجود در بردار n، برابر با تعداد پردازنده های شما باشد. برای مثال می توان از بردارهای (۱ ۸ ۱)، (۲ ۴ ۱) و … استفاده کرد. توجه کنید که در هنگام حل یک مساله دو بعدی، به بعد سوم پردازنده اختصاص ندهید (مقدار ۱ باشد). در غیر این صورت پردازنده خود را به هدر داده اید!

حال برای حل موازی می توان به راحتی از اسکریپت foamJob استفاده کرد:

در اینجا آپشن p به معنای Parallel (حل موازی) و s به معنای Screen (صفحه نمایش) است. اگر آپشن s استفاده نشود، چیزی در صفحه نمایش هنگام حل نشان داده نخواهد شد.

در انتهای حل می توانید از نتایج آن لذت ببرید!

resultدانلود فایل های اُپنفوم مساله بدون شبکه:

[su_members message=”این قسمت فقط برای اعضا قابل مشاهده است. لطفا %login% شوید.” login_text=”وارد” login_url=”http://openfoam.ir/%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b9%d8%b6%d8%a7/”][su_button url=”http://cdn.persiangig.com/preview/3vWhCl5X8h/openfoam_VOF.tar.gz” target=”blank” background=”#229620″ radius=”10″ icon=”icon: arrow-down”]دانلود[/su_button][/su_members]

دانلود فایل شبکه

[su_members message=”این قسمت فقط برای اعضا قابل مشاهده است. لطفا %login% شوید.” login_text=”وارد” login_url=”http://openfoam.ir/%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b9%d8%b6%d8%a7/”][su_button url=”http://cdn.persiangig.com/preview/wLOd7ATpSL/openfoamTet.rar” target=”blank” background=”#229620″ radius=”10″ icon=”icon: arrow-down”]دانلود[/su_button][/su_members]

مشاهده انیمشن نهایی:

question-mark

راه اندازی بخش پرسش و پاسخ سایت

بخش پرسش و پاسخ سایت به روش سایت Stackoverflow.com راه اندازی شد!

سایت Stackoverflow به عنوان یک سایت موفق در زمینه پرسش و پاسخ توانست بهترین نوع یافتن جواب برای موضوعات مختلف را فراهم کند. شیوه کار به این روش است که کاربر ابتدا سوال خود را با انتخاب موضوع اصلی آن مطرح می کند. سپس کاربران مختلف به پاسخگویی به این سوال می پردازند. اما در عین حال به جواب های از قبل داده شده امتیاز مثبت یا منفی می دهند. در نهایت جوابی که بیشترین تعداد مثبت را دریافت کرده باشد به عنوان جواب برتر در ابتدای جواب ها نشان داده می شود.

سایت askubuntu.com نیز دقیقا همین روند را پیش گرفت و در مدت زمان کوتاهی توانس به تعداد زیادی از سوالات جواب دهد. این سایت ها امروزه خود تبدیل به دایرکتوری های بسیار عظیمی از سوالات متعدد در زمینه های مختلف تبدیل شده اند؛ به طوری تقریبا اکثر سوالاتی که ممنکن است برای یک نفر در زمینه های مختلف به وجود بیاید در اینجا جواب داده شده است. البته موضوعات اصلی مربوط به فناوری اطلاعات می باشد.

در سایت اُپنفوم نیز تصمیم گرفتیم تا چنین روشی را پیاده سازی کنیم. بسیاری از مشکلات فراوانی که در اُپنفوم به وجود می آیند به سادگی قابل حلند اما له دلیل عدم وجود فایل های کمکی فراوان، عملا دسترسی به راه حل این مشکلات بسیار مشکل است. از طرفی اگر کاربران مختلف تجربه ای را که در اختیار دارند با کاربران دیگر به اشتراک بگذارند به زودی اکثر سوالات (حداقل سوالات رایج) جواب داده خواهد شد.

برای دسترسی به این بخش می توانید از منوی سایت روی گزینه پرسش و پاسخ کلیک کنید.

pipe2

مقدمه و حل جریان توسعه یافته داخل لوله – قسمت ۲/۲

[su_label type=”important”]تست شده در OF 2.3[/su_label]

در قسمت اول این آموزش به بررسی نحوه تولید یک شبکه توسط ابزار بلاکمش پرداخته شد. همچنین نحوه تولید یک مساله جدید در اُپنفوم توضیح داده شد. اما در قسمت دوم این آموزش یاد خواهیم گرفت:

  • تنظیم شرط مرزی از نوع Mapped
  • حل مساله و مشاهده نتایج در پاراویو
  • وارد کردن شبکه از گمبیت به اُپنفوم

اما از مساله ای که در قسمت اول بحث شد، فعلا فقط شبکه آن آماده شده است. لازم است تا در این قسمت شرایط مرزی و همچنین تنظیمات مربوط به حل، اعمال شوند. شرایط مرزی یک مساله در اُپنفوم در داخل پوشه ۰ قرار می گیرد. این پوشه در پوشه اصلی مساله قرار دارد. در حالت کلی یک مساله اُپنفوم باید حاوی سه پوشه باشد. پوشه های ۰، constant و system. در پوشه صفر همانطور که گفته شد، شرایط مرزی تعریف می شوند. در پوشه constant علاوه بر شبکه (که قبلا توضیح داده شد) یک سری ثوابت و تنظیمات دیگر اعمال می شوند. مثلا تعیین مقدار ویسکوزیته سینماتیک، آرام یا آشفته بودن جریان و غیره. پوشه system نیز حاوی تنظیمات اصلی حلگر و همچنین اسکیم های گسسته سازی معادلات می باشد.

  • تعریف شرایط مرزی

برای تعریف شرایط مرزی، هر پارامتر (مثل فشار یا سرعت) دارای فایل مخصوص به خود در پوشه ۰ است. در هرکدام از این فایل ها، شرایط مرزی مربوط به هرکدام از مرزها تعریف می شوند. در مساله حاضر که از حلگر icoFoam برای حل استفاده می کند، تنها دو پارامتر فشار (p) و سرعت (U) موجودند. شرایط مرزی بسیار زیادی در اُپنفوم موجود است. کاربر باید با تجربه ای که به مرور زمان کسب می کند و همچنین با دانشی که از CFD در اختیار دارد، بهترین شرط مرزی را انتخاب کند. در مساله حاضر تنها سه مرز موجودند و برای هرکدام باید شرایط مرزی مربوط به فشار و سرعت داده شوند. اما شروط مرزی برای فشار به شکل زیر خواهند بود:

برای فشار در ورودی و روی دیوارها معمولا از شرط مرزی گرادیان صفر استفاده می شود. یعنی هیچ شار فشاری از درون این مرزها عبور نمی کند. اما برای خروجی از شرط مرزی دیریکله با مقدار ثابت استفاده می شود. این مقدار در اینجا صفر در نظر گرفته شده اما می توان از هر مقداری برای آن استفاده کرد. دلیل این امر این است که در مسائل غیر قابل تراکم تنها اختلاف فشار مهم است و نه مقدار مطلق آن. حال فرض کنید می خواستیم این مساله را به صورت عادی و بدون استفاده از شرط مرزی Mapped حل کنیم. در این صورت شرط مرزی سرعت برای این سه مرز به شکل زیر تعریف میشد:

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

در ابتدا لازم است تا در داخل فایل boundary موجود در پوشه polyMesh نوع شرط مرزی inlet (ورودی) تغییر داده شود. قبلا گفته شد که در این فایل تنها ۶ شرط مرزی کلی تعریف می شوند. اما در این مساله خاص، به استثناء از یک شرط مرزی دیگری به نام MappedPatch استفاده خواهد شد. این شرط مرزی به این شکل تعریف می شود:

همانطور که مشاهده می شود در این شرط مرزی از یک Offset برای نمونه گیری استفاده می شود. در این شرط مرزی گفته شده که اطلاعات از یک سطح به فاصله ۱ متری در جهت z روی مرز inlet قرار داده شود. این ۱ متر در حقیقت همان فاصله بین ورودی از خروجی لوله است. اما قسمت بعدی مربوط به فایل U موجود در پوشه ۰ می شود. در این فایل در ورودی لازم است تا از شرط مرزی Mapped استفاده شود:

اما در اینجا باید مقدار سرعت ورودی نیز به مساله داده شود. در قسمت value و average لازم است به ترتیب مقدار سرعت ورودی و متوسط آن (که به دلیل یکنواخت بودن سرعت در ورودی همان برابر با سرعت ورودی خواهد بود) به شرط مرزی داده شود. حال مساله آماده حل برای استفاده از این نوع شرط مرزی است.

اما در پوشه constant علاوه بر اینکه شبکه در داخل پوشه polyMesh قرار گرفته، لازم است تا مقدار ویسکوزیته سینماتیک که یک ثابت در معادله مومنتوم می باشد تعیین شود. این مقدار در داخل فایلی به نام transportPeroperties تعیین می شود.

همچنین دقت شده است که در اینجا جریان آرام باشد. در داخل لوله جریان وقتی آرام است که عدد رینولدز کمتر از ۲۳۰۰ باشد. با محاسبه قطر هیدرولیکی برای مقطع مستطیلی خواهیم داشت:

سپس با استفاده از فرمول عدد رینولدز داریم:

بنابراین جریان آرام است.و اما در انتها و در پوشه system، سه فایل اساسی یک مساله اُپنفوم قرار دارند. فایل اول controlDict به عنوان مهمترین فایل مساله، حاوی حلگر مورد استفاده، گام زمانی، نحوه ذخیره سازی گام ها و بسیاری از تنظیمات دیگر است که به مرور در آموزش ها به آنها اشاره خواهد شد. همچنین این فایل حاوی Function Object های تعریف شده توسط کاربر خواهد بود. در اینجا مقدار گام زمانی، گام زمانی شروع به حل و همچنین مقدار زمان حل مشخص می شوند. برای پایا شدن حل لازم است تا مقدار زمان انتهایی، مناسب در نظر گرفته شود. معیار محاسبه گام زمانی نیز عدد کورانت می باشد که بهتر است در حین حل مساله کمتر از یک باشد.

در فایل دوم، fvSchemes، اسکیم های گسسته سازی معادلات تعیین می شوند. در حلگر icoFoam تنها یک معادله ناویر استوکس حل خواهد شد. لازم است برای همه جمله های موجود در این معادله اعم از گرادیان فشار، پخشندگی (Laplacian) و جابجایی (divSchemes) اسکیم های گسسته سازی تعیین شوند. اما فعلا لزومی ندارد کاربر با انواع مختلف اسکیم های گسسته سازی دست و پنجه نرم کند. فعلا می توان از همین اسکیم های در نظر گرفته شده برای مساله cavity برای مساله حاضر نیز استفاده کرد.

فایل آخر، fvSolution حاوی تنظیمات مربوط به حلگر های ماتریس است. همانطور که می دانید در حل یک معادله به روش عددی ابتدا اسکیم های گسسته سازی، معادلات حل را به یک سری معادلات جبری محدود درون هر یک المان تبدیل می کنند. این کار باعث به وجود آمدن معادلات جبری چند مجهولی خواهند بود که می توان آنها را به شکل ماتریس نوشت. این ماتریس ها را می توان به روش های مختلف، مثلا روش گاوس سیدل، حل کرد. در فایل fvSolution این حلگرها تعیین می شوند. همچنین مقدار خطای حل (Tolerance) برای هرکدام پارامترهای تعیین می شود. در ادامه و در فایل fvScehmes، تنظیمات مربوط به الگوریتم کوپلینگ سرعت و فشار نیز تعیین می شوند. برای نموه از این الگوریتم ها می توان به SIMPLE و یا PIMPLE اشاره کرد. همچنین در انتهای این فایل معمولا Relaxation Factor ها نیز تعریف می شوند.

حال مساله آماده حل است.

  • حل مساله و مشاهده نتایج در پاراویو

برای حل مساله کافیست تا نام حلگر وارد شود. یعنی بعد از وارد شدن به پوشه مساله توسط ترمینال، کافیست دستور زیر وارد شود:

حال مساله شروع به حل خواهد کرد. پس از حدود ۲۰ ثانیه، مساله پایا خواهد شد. برای دیدن نتایج از پاراویو استفاده خواهیم کرد:

حال لازم است تا ابتدا مثل قبل، تمام مرزهای هندسه انتخاب شوند. در ادامه لازم است هر دو پارامتر فشار و سرعت انتخاب شوند. با کلیک بر روی دکمه Apply، هندسه و پارامترها لود خواهند شد. حال می توان به راحتی و با استفاده از ابزارهای مختلف نرم افزار پاراویو نتایج را مشاهده کرد. برای دیدن پروفیل سرعت در داخل لوله می توان از ابزار Slice استفاده کرد. با انتخاب این ابزار، جهت برش را در جهت عمود بر z قرار خواهیم داد:

7

7_2

پس از اعمال این ابزار با دکمه Apply لازم است تا به گام زمانی انتهایی برویم تا نتایج را در انتهای حل مشاهده کنیم.

8

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

9

در نهایت نتیجه به شکل زیر خواهد بود:

10

  • وارد کردن یک شبکه از گمبیت به اُپنفوم

در این قسمت یک شبکه تولید شده توسط گمبیت را وارد اُپنفوم خواهیم کرد. اینبار هندسه یک لوله با مقطع یک دایره حفره دار مورد بررسی قرار خواهد گرفت. در گمبیت این شبکه تولید شده و آماده ورود به اُپنفوم است. شاید سوال پیش آید که شرایط مرزی در گمبیت باید چگونه تعیین شوند. در گمبیت کافیست دقیقا همانند زمانی که برای فلوئنت شبکه آماده میشد، شرایط مرزی تعیین شوند. یعنی برای مرز لوله، شرط مرزی Wall، برای مرز ورودی، شرط مرزی Velocity Inlet و برای مرز خروجی، شرط مرزی Outflow انتخاب شوند. با وارد کردن شبکه به اُپنفوم، به صورت خودکار شروط مرزی wall و patch به مرزها داده خواهد شد.

لازم است تا یک کپی از مساله قبلی تنظیم شده در اینجا گرفته شود. بنابریان کافیست از پوشه های ۰، constant و system کپی گرفته شده و در یک پوشه جدید دیگر، اینبار مثلا به نام pipeDevelopedFlowAnnular قرار گیرند. خود این پوشه مادر در پوشه run قرار خواهد داشت.

اما نحوه وارد کردن شبکه به اُپنفوم بسیار ساده است. کافیست ابتدا شبکه به شکل فایل با فرمت .msh در گمبیت ذخیره شده و سپس در پوشه اصلی مساله در کنار پوشه های ۰، constant و system قرار داده شود. از طرفی لازم است تا پوشه polyMesh که شبکه قبلی در آن قرار دارد، پاک شود. سپس در ترمینال و در پوشه اصلی مساله کافیست دستور زیر وارد شود:

در اینجا نام pipe.msh همان نام شبکه است. با اجرای این دستور دیده می شود که شبکه در داخل پوشه constant/polyMesh ایجاد می شود. حال لازم است تا فایل boundary دوباره تغییر داده شود. اگر این کار انجام شود خواهیم داشت:

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

11

دانلود فایل های مساله دوم بدون شبکه:

[su_members message=”این قسمت فقط برای اعضا قابل مشاهده است. لطفا %login% شوید.” login_text=”وارد” login_url=”http://openfoam.ir/%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b9%d8%b6%d8%a7/”][su_button url=”http://cdn.persiangig.com/preview/olRk7YJSaU/pipeDevelopedFlowAnnular.zip” target=”blank” background=”#229620″ radius=”10″ icon=”icon: arrow-down”]دانلود[/su_button][/su_members]

دانلود شبکه گمبیت:

[su_members message=”این قسمت فقط برای اعضا قابل مشاهده است. لطفا %login% شوید.” login_text=”وارد” login_url=”http://openfoam.ir/%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b9%d8%b6%d8%a7/”][su_button url=”http://cdn.persiangig.com/preview/c492X5zK0p/pipe.msh” target=”blank” background=”#229620″ radius=”10″ icon=”icon: arrow-down”]دانلود[/su_button][/su_members]

Pipe

مقدمه و حل جریان توسعه یافته داخل لوله – قسمت ۱/۲

[su_label type=”important”]تست شده در OF 2.3[/su_label]

اولین آموزش مربوط به نرم افزار اُپنفوم را اختصاص خواهیم داد به حل جریان داخل یک لوله. این لوله می تواند مقاطع مختلفی داشته باشد. در این مساله یاد خواهیم گرفت:

  • تولید یک شبکه بسیار ساده در بلاکمش برای یک لوله با مقطع مستطیلی
  • ایجاد و تنظیم یک مساله جدید در اُپنفوم
  • مشاهده شبکه در پاراویو

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

در این مساله از روشی جالب برای به دست آوردن پروفیل سرعت توسعه یافته استفاده خواهد شد. همانطور که می دانید، برای ایجاد توسعه یافتگی، جریان داخل لوله باید مسیری را طی کند. به این مسیر طی شده به اصطلاح، طول توسعه یافتگی می گویند. اما با محاسبه مقدار این طول با استفاده از فرمول های موجود، مشاهده خواهد شد که در اکثر موارد و در رینولدزهای گوناگون، مقدار این طول نسبت به قطر استوانه بسیار زیاد است. در نتیجه تعداد المان های موجود در شبکه نیز زیاد خواهد بود و در نتیجه زمان حل بسیار بالا خواهد رفت. اما می توان به روش جالبی این مدت زمان را به مقدار بسیار زیادی کاهش داد. این روش چیزی نیست جز استفاده از شرط مرزی Mapped. وظیفه این شرط مرزی قرار دادن اطلاعات موجود در یک مرز روی مرز دیگر است. حال فرض کنید در مساله، پروفیل سرعت (میدان سرعت) در مرز خروجی، در هر گام زمانی روی مرز ورودی اعمال شود. اگر این روند به صورت مداوم در چند گام زمانی تکرار شود، در نهایت پروفیل سرعت به صورت توسعه یافته خواهد شد. در اینجا دیگر نیاز به در نظر گرفتن طول زیاد برای لوله نیست، بلکه با در نظر گرفتن یک طول لوله کوتاه که به جریان اجازه داده شود کمی از ورودی تا خروجی جریان پیدا کرده و لایه مرزی آن افزایش یابد، کافی است.

1

  • ایجاد مساله جدید و تولید شبکه لوله توسط بلاکمش

و اما بلاکمش! این ابزار اولین ابزار ارائه شده توسط اُپنفوم برای تولید شبکه های ساختاریافته است. اهمیت شبکه های ساختار یافته به خوبی برای همه متخصصین CFD واضح است. در آینده به طور خیلی مفصلی به بحث شبکه های ساختاریافته پرداخته خواهد شد. اما بلاکمش ابزاری بسیار ساده و در عین حال قدرتمند برای تولید چنین شبکه هایی محسوب می شود. تمام تنظیمات این ابزار اعم از نقاط، لبه ها، بلوک ها، تعداد المان ها و شرایط مرزی داخل فایلی به نام blockMeshDict ذخیره می شود. گاهی افراد گله می کنند که عدم وجود محیطی گرافیکی برای این ابزار از نقاط ضعف آن محسوب می شود، اما این مشکل را می توان به راحتی برطرف نمود. این ابزار از شما تنها مختصات نقاط را خواهد خواست. در ادامه هر تنظیماتی که انجام می شود بر اساس همین نقاط خواهد بود. بنابراین کافیست تا با استفاده از روشی مختصات نقاط را به دست آوریم. برای مسائل خیلی ساده می توان به صورت ذهنی هم مختصات نقاط را حساب کرد. اما برای مسائل پیچیده تر بازم هم هیچ مشکلی نیست! مگر سالیدورکس مرده است؟! پیچیده ترین هندسه خود را در یک نرم افزار CAD مثل سالیدورکس طراحی کنید و نقاط را از آن استخراج کنید! همین!

و اما تنظیم همانطور که گفته شد برای استفاده از این ابزار لازم است تا فایل blockMeshDict آن تنظیم شود. این فایل تا نسخه ۲٫۴ از اُپنفوم در داخل پوشه contant/polyMesh قرار دارد و در نسخه بعدی آن یعنی نسخه ۳٫۰ در داخل پوشه system قرار می گیرد. اما این فایل از قسمت هایی تشکیل شده است که به صورت خلاصه در حین شبکه بندی، در اینجا مطرح می شود.

برای شروع هر مساله اُپنفوم لازم است تا ابتدا فایل های ضروری آن ایجاد شوند. برای این کار به هیچ وجه لازم نیست تمام فایل ها از ابتدا توسط کاربر تولید شوند، کافیست فایل ها از نزدیک ترین مثال به مثال حاضر کپی شده و در پوشه run که پوشه اصلی کاربر است کپی شود. پوشه run در داخل پوشه زیر قرار دارد:

که در آن user، همان نام کاربر است. این پوشه مهمترین پوشه مورد استفاده کاربر است. حتی الامکان باید همه مسائل کاربر در این پوشه قرار گیرند. برای دستیابی به این پوشه در ترمینال، کافیست دستور زیر اجرا شود:

به همین راحتی، شما به پوشه run وارد خواهید شد. بنابراین قرار دادن مسائل در این پوشه به سریع تر شدن روند دسترسی به فایل ها کمک می کند. به هیج وجه من الوجوه (!) مسائل خود را روی دسکتاپ لینوکس قرار ندهید! همچنین پوشه مربوط به مثال های آموزشی خود اُپنفوم که tutorials نام دارند در داخل پوشه run قرار گرفته است. و اما سوال اینجاست که از کجا بدانیم کدام مثال آموزشی اُپنفوم نزدیکترین مثال به مساله ماست. سوال بسیار بجایی است اما جواب بسیار خشنی در انتظار شماست! یک تحقیق، دو کسب تجربه. هیچ کسی نمی تواند صد در صد به شما بگوید که کدام مثال به مساله شما نزدیک تر است. این خود شما هستید که این تشخیص را خواهید. هرچه تشخیص شما نزدیکتر باشد، تنظیم کردن مساله راحت تر خواهد بود. برای مثال اگر شما به دنبال حل یک مساله ناپایا هستید، به هیچ وجه نباید به سراغ مثال های آماده یک مساله پایا بروید! همین قضیه برای تمام مباحث برقرار است. اولین قدم برای تشخیص درست مثال ها، مطالعه اجمالی بر روی انواع حلگرهای اُپنفوم است. این حلگرها را می توانید در اینترنت و یا در قسمت ۳٫۵ موجود در User Guide نرم افزار بیابید. اما User Guide کجاست. این فایل PDF در محل نصب اُپنفوم شما قرار دارد:

در لینوکس / به معنای پوشه ریشه (Root) می باشد. برای دسترسی به آن کافیست در یک پنجره باز شده، گزینه Computer انتخاب شود.

2

بنابراین قبل از هر کاری، سعی کنید تا جای ممکن حلگرهای اُپنفوم را بیابید. در اُپنفوم هیچ کس به اندازه خودتان قادر نیست به شما کمک کند! وقتی تا حدودی با حلگرها آشنا شدید، حال لازم است تا مثال های معروف مربوط به حلگرهای مهم را نیز یاد بگیرید. مثلا همه فومِر ها (حتی مبتدی ترین آنها) مثال Cavity مربوط به حلگر icoFoam را می شناسد. او می داند که اولا این حلگر، یک حلگر ناپایا برای حل جریان های آرام است. ثانیا او می داند که این مساله از ابزار بلاکمش برای شبکه بندی هندسه خود استفاده کرده است. بنابراین در هر مساله ای از جمله مساله حاضر که دارای چنین ویژگی هایی باشد می توان از این مثال آموزشی به عنوان مثال نمونه استفاده کرد. البته مساله حاضر را می توان با استفاده از حلگرهای پایا نیز حل کرد. پس برای شروع کار لازم است تا یک کپی از مثال Cavity در پوشه run کاربر قرار داده شود. مثال Cavity در آدرس زیر قرار دارد:

با کپی آن پوشه اصلی مثال ما در حال حاضر این خواهد بود:

اما ما ترجیح میدهیم نامی برای مثال خود انتخاب کنیم. بنابراین نام پوشه را مثلا به pipeDevelopedFlow تغییر می دهیم. بنابراین تا اینجای کار:

هشدار: لینوکس و از جمله ترمینال آن به حروف بزرگ و کوچک حساس هستند.

حال باید شروع به تغییر فایل های داخل این مثال کنیم تا مساله مورد نظر خود را آماده کنیم. خب هندسه Cavity تا مقدار زیادی شباهت به مساله حاضر دارد. چرا که هر دو مساله از یک بلوک واحد تشکیل یافته اند. تنها کافیست مختصات نقاط بلوک در فایل blockMeshDict تغییر داده شوند تا هندسه مورد نظر ما ایجاد شود. این فایل در داخل پوشه constant/polyMesh قرار دارد.

نکته: شبکه اُپنفوم به صورت چندین فایل در داخل پوشه polyMesh قرار میگیرد. این فایل ها شامل نقاط، سطوح، المان ها، CellZone ها و … هستند. بنابراین اگر نیاز به پاک کردن شبکه دارید کافیست این فایل ها را حذف کنید. البته دقت کنید که در میان این فایل ها فایل blockMeshDict حذف نشود. چرا که این داخل این تنظیمات مربوط به ابزار بلاکمش قرار دارد که برای شبکه بندی مجدد لازم است. البته این برای زمانی است که شما از ابزار بلاکمش استفاده می کنید. برای دیگر حالت ها، هیچ نیازی به وجود فایل blockMeshDict نیست و می توانید برای حذف شبکه، خود پوشه polyMesh را حذف کنید.

در این مثال نیاز است تا قبل از شروع شبکه بندی، شبکه قبلی ایجاد شده حذف شود. معمولا بعد از نصب اُپنفوم برای تست صحت کارکرد آن یکبار مساله Cavity اجرا می شود که این منجر بخ وجود فایل های شبکه در داخل پوشه polyMesh خواهد شد.

اما فایل blockMeshDict دارای قسمت های مختلفی است. در ابتدای این فایل مشخص می شود که آیا نیازی هست تا اعداد موجود در این دیکشنری به متر تبدیل شوند یا خیر؟ فرض کنید در ادامه و در زمان تعیین مختصات نقاط شما ترجیح می دهید که اعداد به میلیمتر وارد شوند، در این صورت حتما باید در کلیدواژه convertToMeters مقدار ۰٫۰۰۱ درج شود. این به این خاطر است که اُپنفوم بر اساس واحد های SI کار می کند.

در قسمت بعد نوبت به تعیین مختصات نقاط می رسد. در دیکشنری vertices مختصات نقاط باید به ترتیب وارد شوند. ترتیب این نقاط از آنجایی مهم است که در ادامه و در هنگام تعیین بلوک ها و لبه ها، نیاز به شماره این نقاط خواهیم داشت. این نقاط به ترتیب از صفر شماره گذاری می شوند. برای مثال در زیر اولین نقطه دارای شماره صفر، دومین نقطه دارای شماره ۱ و همینطور ادامه می یابد. در اینجا تنها کافیست مختصات نقاط به مختصات مورد نظر ما تغییر داده شوند. فرض کنید لوله در جهت z قرار خواهد گرفت و سطح مقطع آن نیز همانطور که گفته شد به شکل مستطیل خواهد بود. بنابراین مختصات نقاط را به شکل زیر وارد می کنیم.

نکته: هیچ محدودیتی در ترتیب نقاط وجود ندارد. اما باید بدانید که نقاط به ترتیب شماره گذاری خواهند شد و شما در ادامه از این شماره ها استفاده خواهید کرد.

در ادامه نیاز است تا بلوک ها تعیین شوند. در مبحث شبکه های ساختاریافته کل بحث روی همین بلوک هاست. اما اینجا به این مبحث اشاره نمی شود. بلوک از ۸ نقطه تشکیل می شود. لازم است تا با استفاده از نقاط بالا یک بلوک بسازیم. اما ترتیب نقاط برای تعریف یک بلوک در اُپنفوم مهم است. باید ابتدا نقاط موجود روی یک وجه بلوک به صورت پادساعتگرد شمرده شوند، سپس به همین ترتیب برای وجه روبرویی تکرار شود. نحوه شمردن این نقاط و انتخاب وجه (به دلخواه کاربر) منجر به تعریف مختصات مساله خواهد شد.

3

همانطور که در بالا مشاهده می شود، امتداد اتصال نقطه اول و دوم، مختصات اول (x1) خواهد بود. امتداد اتصال نقطه دوم و سوم، مختصات دوم (x2) خواهد بود. امتداد منتهی به وجه روبرویی نیز مختصات سوم (x3) خواهد بود (شاید بگویید مگر مختصات سوم از ضرب خارجی دو مختصات اول به دست نمی آید؟ با تجربه شخصی، این مورد به اشتباه گاهی در این ابزار رعایت نمی شود). در نتیجه بلوک به شکل زیر باید تعریف شود:

اما پرانتز دوم مربوط به تعداد المان ها در هر امتداد مختصات است. همچنین پرانتز سوم مربوط به Grading است که در هر جهت باید تعیین شود. Grading به معنی جمع شدگی شبکه در یک طرف و یا جتی در دوطرف است. در اینجا برای ریزتر شدن شبکه ها در مجاور لوله، از Grading در جهات y و z استفاده شده است.

قسمت بعدی edges، مربوط به تعریف کمان ها و یا Spline هاست. در صورتی که در مساله چنین لبه هایی موجود نباشد، این قسمت خالی گذاشته می شود.

اما قسمت آخر مربوط به تعریف شرایط مرزی می باشد. شرایط مرزی در اُپنفوم در کل سه نوع می باشد. نوع اول، نوع Basic نام دارد که تنها شامل شش عنوان patch، wall، symmetry، cyclic، empty و processor می شود. شما فعلا تنها کافیست دو نوع شرط مرزی patch و wall را بشناسید. شرط مرزی patch برای مرزهای ورودی و خروجی استفاده می شود و شرط مرزی wall برای دیوارها. البته می توان از شرط مرزی patch برای مرز دیوار، اما فقط در جریان های آرام نیز استفاده کرد. اما نحوه تعیین شرایط مرزی با تعیین نوع مرز برای سطوح بلوک انجام می گیرد. در اینجا نیز سطوح با شماره نقاط سازنده آنها مشخص می شود. در اینجا یک ورودی، یک خروجی و یک مرز مربوط به لوله وجود دارد. مرز لوله خود از چهار سطح تشکیل شده است. بنابراین خواهیم داشت:

بنابراین تا اینجای کار تنظیم ابزار بلاکمش پایان یافته و می توان شبکه را تولید کرد. برای تولید شبکه باید دستور بلاکمش اجرا شود. اما برای اجرای این دستور حتما باید در پوشه اصلی مساله باشید. بنابراین با استفاده از ترمینال لینوکس لازم است تا وارد این پوشه شوید. خب پس کافیست یک ترمینال با کلید های میانبر Ctrl+Alt+T باز کنیم. سپس برای وارد شدن به پوشه run کافیست دستور زیر را وارد کنیم:

حالا کافیست وارد پوشه مساله شویم. دستور cd مخفف Change Directory این کار را برای ما انجام خواهد داد. کافیست دستور زیر را در ترمینال وارد کنیم:

نکته: برای نوشتن نام یک فایل یا پوشه در ترمینال لازم نیست تمام حروف آن را خودتان تایپ کنید. کافیست چند حرف ابتدایی نام را وارد کنید سپس با فشردن کلید Tab، ترمینال به صورت خودکار نام آن را برای شما کامل خواهد کرد. در صورتی که نام کامل نشد یا فایلی به این نام موجود نیست و یا حداقل دو فایل با حروف نوشته شما شما موجود است. بنابراین حرف بعدی را وارد کنید و باز Tab بزنید.

حالا در پوشه اصلی مساله قرار گرفته ایم. کافیست با دستور زیر شبکه را تولید کنیم:

اگر سری به پوشه constant/polyMesh بزنیم خواهیم دید که شبکه در آن ذخیره شده است.

  • مشاهده شبکه در نرم افزار پاراویو

خب چگونه شبکه مان را به صورت گرافیکی ببینیم؟ برای این کار کافیست در ترمینال دستور زیر را وارد کنید. این دستور نرم افزار پاراویو را برای شما باز خواهد کرد.

نکته: به تفاوت بین paraFoam و paraview دقت کنید. paraview نام نرم افزاری است برای انجام اعمال پس پردازشی، اما paraFoam یک اسکریپت نوشته شده برای اُپنفوم است که به وسیله آن می توان مستقیم مساله اُپنفوم را در پاراویو باز کنید.

با باز شدن نرم افزار پاراویو باید هندسه خود را برای لود شدن انتخاب کنید. قبل از کلیک بر روی دکمه Apply لازم است دو کار انجام دهید. اول باید تمام شرایط مرزی را انتخاب کنید. برای اینکار فقط یک بار روی گزینه تیک موجود در بالای تمام شرایط مرزی کلیک کنید. اما از طرفی چون هنوز شرایط مرزی تنظیم نشده اند و به دلیل عدم مطابقت نام شرایط مرزی شبکه با نام های ذکر شده در پوشه صفر مساله، لازم است تا تیک مربوط به لود کردن میدان های فشار (p) و سرعت (U) برداشته شود:

4-5

حالا می توانید با کلیک بر روی دکمه Apply شبکه را لود کنید برای دیدن المان های شبکه می توانید از قسمت بالای پاراویو آن را روی حالت wireframe تنظیم کنید:

6

فایل های آموزشی مساله اول

[su_members message=”این قسمت فقط برای اعضا قابل مشاهده است. لطفا %login% شوید.” login_text=”وارد” login_url=”http://openfoam.ir/%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b9%d8%b6%d8%a7/”][su_button url=”http://cdn.persiangig.com/preview/Bx4ZjySAdl/pipeDevelopedFlow.zip” target=”blank” background=”#229620″ radius=”10″ icon=”icon: arrow-down”]دانلود[/su_button][/su_members]

در قسمت دوم این آموزش با ما همراه باشید با نحوه تنظیم مساله برای حل میدان جریان توسط حلگر icoFoam. همچنین نحوه وارد کردن شبکه از نرم افزار گمبیت نیز عنوان خواهد شد.