چگونه در 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

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

پاسخ دهید