کاهش حجم فایل خروجی نرم‌افزار کامسول

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

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

گام‌های اصلی در مدل‌سازی یک مساله‌ی وابسته به زمان

  • ابتدا مدل فیزیکی خود را بشناسید!
  • بدست آوردن فرکانس غالب سیستم.
  • انتخاب گام ذخیره‌سازی مناسب.
  • انتخاب محدوده‌ی تحلیل زمانی کافی برای حل.

روش‌های کاهش حجم داده‌ی خروجی

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

بیایید با مثالی پیش رویم

خب برای اینکه بحث را ملموس کنیم و با اشراف بیشتری نسبت به مساله، پیش رویم، ادامه‌ی بحث را با مثالی دنبال می‌کنیم. اما اینکه چه ارتباطی با منبع Disk دارد، با ما همراه باشد.

تعریف مدل:

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

سیملب سنتر
شکل1: هندسه و شروط مرزی سیلندر غوطه ور در سیال
سیملب سنتر
جدول1: پارامترهای فیزیکی و هندسی مدل

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

به جدول 1، نگاه کنید، پارامترهای \(\mathrm{Mu, Rho, dis, L, H, D} \) و \(\mathrm{U\_avg} \) جزء داده های مساله می‌باشند. برای انتخاب فیزیک مناسب در این مدل سیالاتی باید ابتدا رژیم جریان را بشناسیم که با محاسبه‌ی عدد رینولدز (\(\mathrm{Re} \)) در اینجا مشخص می‌شود که جریان، آرام است چراکه در سیلندرها در رینولدز کمتر از 150، جریان آرام خواهد بود[Re. 1].

اما قبل از حل مساله نیاز داریم تا حدودی با رفتار سیستم، آشنا شویم که در اینجا، فرکانس گردابه‌های جریان است. با استفاده از رابطه‌ی تقریبی عدد استروهال در رینولدز 40 تا 200، فرکانس سیستم در این سرعت و پارامترهای مربوطه، در حدود 1.66 هرتز بدست می‌آید. کل زمان محاسبه را 20 پریود درنظر می‌گیریم.

همانطور که مطلع‌اید. در حل‌گر time dependent محدوده‌ی زمانی‌ای (\(\mathrm{range(0,dt\_s,t\_end)} \)) که وارد می‌نمایید، همان گام‌های ذخیره سازی حل است و ارتباطی با دقت حل مساله ندارد (به جز فیزیک‌هایی نظیر Multibody Dynamics که بطور پیشفرض در قسمت Time Stepping بر روی Strict تنظیم شده‌اند که در این صورت از محدوده‌ی زمانی تاثیر مستقیم می‌پذیرد. و بطور مشابه برای Intermediate.) بنابراین، صرف نظر از دقت حل، می‌توانید داده‌های خروجی را در زمان‌های خاص یا گام‌های زمانی خاص، محاسبه نمایید.

در اینجا گام ذخیره سازی حل، یک درصد پریود درنظر گرفته شده است. اما چرا یک درصد پریود؟ به شکل 2، توجه فرمایید که نمودار تابع سینوس با دوره‌ی تناوب یک ثانیه، در یک دوم پریود در گام ذخیره سازی مختلف، رسم شده است. باتوجه به شکل برای هرچه بهتر نمایش داده‌ها در فرکانس مطلوب، یک درصد پریود غالب سیستم انتخابی بسیار خوب است، چرا که اگر هم فرکانسی دو یا چهار برابر فرکانس پیش‌بینی شده در سیستم هم، رخ دهد، در خروجی، مشاهده می‌شود. و همچنین پارامتر \(\mathrm{dt\_f} \) را مشاهده می‌نمایید که حداکثر گام زمانی‌ای است که به حل‌گر اجازه داده می‌شود، یعنی صرف نظر از ارضا شدن تلرانس‌های نرم‌افزار، به نرم‌افزار اجازه نمی‌دهیم که از این گام زمانی فراتر رود. با استفاده از آنالوژی، بطور مشابه با تحلیل گام زمانی، استفاده از نیم درصد پریود در حداکثر گام زمانی در اکثر فیزیک‌ها، شروع مطلوبیست. 

هرچند بررسی CFL Number را نباید فراموش کرد. عدد کورانت، شرطی برای پایداری حل است. اما اشاره به این نکته ضرورت دارد که در حل حاضر و در واقع عموم حل‌گرهای نرم‌افزار کامسول، روش حل بصورت Implicit است و وابستگی پایداری عددی به عدد کورانت، وجود ندارد و تنها این عدد معیاری اولیه برای دقت حل می‌باشد. همچنین در روش حل Runge-Kutta از حل Explicit استفاده می‌شود که در این‌صورت، توجه به عدد کورانت، ضرورت بیشتری می‌یابد. اما در مدل حاضر، عدد کورانت به شکل زیر تعریف می‌شود[Ref. 2] و [Ref. 3]:

$$CFL = \frac{\left|\mathbf{u} \right| Δt}{\mathrm{h} } $$

که \(\mathbf{u} \)، بردار سرعت، \(\mathrm{h} \)، کمترین اندازه‌ی المان(که البته گاها میانگین اندازه‌ی المان‌ها نیز درنظرگرفته می‌شود) و \(Δt\)، گام زمانی است. در مراجع مختلف، مقادیر مختلفی برای عدد کورانت، گزارش شده است که برای ارضا شدن پایداری حل، این عدد باید کمتر از یک باشد[Ref. 3]، برای شروع بررسی مدل، این عدد بین 0.1 تا 0.5، گزارش شده است. اما پیشنهاد می‌شود، از عدد کورانت 0.2 برای شروع کار، استفاده نمایید. در ویدئوی این مدل، با نحوه‌ی محاسبه‌ی عدد کورانت و گام زمانی مستخرج شده از آن، آشنا می‌شوید. در واقع پیشنهاد می‌شود، گام زمانی محاسبه شده با این روش، یعنی \(\mathrm{dt\_c} \) و روش فرکانس غالب، یعنی \(\mathrm{dt\_f} \) بیان شده، مقایسه شده و کمترین آن که همان \(\mathrm{dt\_m} \) است، انتخاب گردد. اما تاکید می‌شود، همچنان در حل Implicit حاضر، نیاز به محاسبه‌ی این عدد نبوده و تنها معیاری برای مقایسه است[Ref. 4]. در بحث همگرایی مش یا همگرایی گام زمانی، می‌توان از این عدد، کمک گرفت.

شکل2: گام ذخیره سازی مختلف در تابع سینوسی

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

قبل از هرگونه بهینه سازی یا کاهش حجم داده‌ی خروجی

مطابق با شکل 3، مش بندی سیستم را مشاهده می‌نمایید. با توجه به پارامترهای سیستم. حجم داده‌ی خروجی قبل از ران، کمتر از 1 مگابایت است. و بعد از ران به 615 مگابایت می‌رسد. نیروی لیفت وارد بر سیلندر نیز در شکل 4، نشان داده شده است. که با استفاده از  Frequency Spectrum در بخش Transformations در زمان پایا (یا همان FFT) فرکانس نیروی لیفت، 1.66 هرتز در زمان پایا، بدست می‌آید.

سیملب سنتر
شکل3: مش بندی مدل
سیملب سنتر
شکل4: نیروی لیفت وارد بر سیلندر نسبت به زمان

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

در حل درنظر گرفته شده، 20 پریود برای تحلیل درنظر گرفته شده است که معادل 12 ثانیه در این مدل می‌باشد. اما با توجه به شکل 4، در ثانیه‌ی دهم حل پایا شده ست و می‌توان حل را متوقف نمود. برای این‌کار ابتدا با استفاده از Probe خروجی مطلوب را حین حل، نشان دهید، که در اینجا همان نیروی لیفت است. سپس در حین حل، به محض پایا شدن جواب، حل را Stop کنید. البته استفاده از Stop Conditions در حل‌گر هم راه دیگری برای توقف شرطی حین حل است. در این صورت علاوه بر حذف ران تایم اضافه، طبیعتا حجم داده‌ی خروجی کمتری نیز خواهید داشت.
اما بیایید کمی بیشتر در رابطه با رسیدن به جواب پایا صحبت کنیم، همیشه حل‌های وابسته به زمان، جوابی بدین شکل نداشته و آشوب‌ناک اند و به راحتی پایا شدن جواب مشخص نیست، بله درست متوجه شدید، سیستم‌های آشوب‌ناک که رفتاری پیش‌بینی نشده دارند هم دراری جوابی پایا هستند، اما در چه مقیاسی؟! به عنوان مثال، اگر بخواهیم برگ‌های درختی را مورد مطالعه قرار دهیم، هر برگ دارای رگبرگ‌هایی است که در مقیاس برگ مورد ارزیابی، نظم خاصی ندارد اما اگر برگ‌ها کنار هم چیده شوند، مشاهده می‌شود که با گسترده نمودن مقیاس، نظم، پدیدار می‌شود. اما چه ارتباطی با سیستم فیزیکی مورد تحلیل دارد؟ به عنوان مثال رفتار نوسانی سیستم حالت مشخصی ندارد، اما به فرکانس یا فرکانس‌های غالب مشخصی با RMS دامنه‌ی مشخصی رسیده، پس، جواب پایا شده است، این بحث را تا اینجا در ذهن نگه دارید، در آینده بیشتر بدان می‌پردازیم.

ذخیره سازی داده‌ها در محدوده‌ی زمانی مناسب، نظیر زمان پایا

فرض کنید شما از رفتار سیستم مطلع‌اید و یا چند ران مشابه با رفتار پیش‌بینی شده اولیه دارید، نیاز به ذخیره سازی تام حل نیست، به عنوان مثال، برای تحلیل نیروی لیفت، 5 پریود نهایی کافی است، در این صورت کافی است که تنها در قسمت وارد کردن محدوده‌ی زمانی برای ذخیره‌سازی، بجای عبارت \(\mathrm{range(0,dt\_s,t\_end)} \) عبارت \(\mathrm{0, \,range(t\_end-5*T,dt\_s,t\_end)} \) را تایپ کنید، در این صورت، 75 درصد حجم داده‌ی ذخیره سازی شما کاهش می‌یابد، یعنی از حدود 615 مگابایت به حدود 154 مگابایت می‌رسد.

استفاده از مش‌بندی استراتژیکی

از آنجائیکه حوالی سیلندر، باید از کیفیت مش بیشتری برخوردار باشد، تنها آنجا کیفیت بیشتری را برای مش در نظر می‌گیریم و به دور از آن حوالی می‌توان از مش درشت تری استفاده نمود، اما در این بین اشاره به این نکته ضرورت دارد که سیال بالادست بر روی سیال پایین دست تاثیر می‌گذارد و نباید از مش خیلی درشتی استفاده نمود، به بیان دیگر بصورت حساب شده باتوجه به نوع مساله، مش را مدیریت کنید. که در شکل 5، این کار را انجام داده‌ایم. در این صورت علاوه بر کاهش حجم داده‌ی خروجی، ران تایم کمتری با منبع رم کمتر خواهید داشت. تعداد المان‌ها از 7828 به 6098، کاهش یافته که در پی آن، حجم داده‌ی خروجی از 615 به 481 مگابایت رسیده است.

شکل5: بهینه سازی مش

غیرفعال کردن ذخیره‌سازی خروجی‌ها و متغیرهای غیرضروری

برای محاسبه‌ی نیروی لیفت وارد بر سیلندر، بجای استفاده از \(\mathrm{-reacf(v)} \) می‌توان از عبارت \(\mathrm{-spf.T\_stressy} \) استفاده نمود که در این صورت می‌توان، تیک گزینه‌ی Store reaction forces را در قسمت Time stepping و در قسمت Output برداشت. همچنین اگر مشتقات زمانی نیز مورد نیاز شما نسیت، می‌توانید آن‌ها را غیرفعال نموده و با روش‌های جایگزین محاسبه نمایید. اما اشاره به این نکته ضرورت دارد که دقت خروجی حل‌گر در محاسبه مشتقات یا نیروی عکس‌العمل بیش از روش‌های دیگر است، اما چندان چشمگیر نیست، به عنوان نمونه در این مثال تنها در اکسترمم نیروی لیفت، روش جایگزین، نسبت به روش دقیق، 2 درصد خطا دارد، حال آنکه غیر از نقاط اکسترمم، انطباق بسیار عالیست. در این صورت با درنظرگرفتن مش موضعی، حجم فایل از 481 به 240 مگابایت می‌رسد که 50 درصد کاهش را نشان می‌دهد.

همچنین در قسمت Dependent Variables در زیرشاخه‌ی Solver Configurations می‌توانید از ذخیره سازی متغیرهایی که بدان‌ها نیازی ندارید صرف‌نظر کنید، برای اینکار کافیست بر روی متغیر مربوطه کلیک کرده و تیک گزینه‌ی  Store in output را بردارید. به عنون مثال، در اینجا برای محاسبه‌ی نیروی لیفت، نیازی به متغیر سرعت نیست.

ذخیره سازی موضعی حل، باتوجه به خروجی مطلوب

در برخی مسائل، نیازی به ذخیره‌ی تمامی نواحی حل نیست و می‌توان بخشی از ناحیه‌ی مهم حل را ذخیره نمود. به عنوان مثال در شکل 6، نواحی اطراف سیلندر، برای ذخیره‌ی اطلاعات، انتخاب شده است. در این صورت با صرف نظر از متغیرهای سرعت و فشار، خارج از این نواحی، حجم فایل خروجی، از 240 به 64 مگابایت می‌رسد. برای تنظیم این مورد، کافیست در قسمت تنظیمات حل‌گر در بخش Time Dependent و در قسمت Values of Dependent Variables تنظیم Store fields in output را بر روی For Selections قرار داده و با استفاده از گزینه‌ی +، Selection مربوطه را انتخاب نمایید، توجه نمایید که از قبل در بخش Definition این Selection باید تعریف گردد.

در اینجا، Selection بر روی Domain تنظیم شده و نواحی اطراف سیلندر انتخاب شده است. حال اگر تنها مرز سیلندر انتخاب گردد، حجم فایل از 64 به 5 مگابایت کاهش می‌یابد. توجه فرمایید باتوجه به خروجی مطلوب در این مساله که تنها نیروی لیفت وارد بر سیلندر، خواسته شده است، ذخیره سازی اطلاعات مرز سیلندر، کافی است. هرچند می‌توان متغیر سرعت را نیز از ذخیره حذف کرد و باز هم حجم را کاهش داد.

سیملب سنتر
شکل6: انتخاب ذخیره‌ی موضعی

بکارگیری probe solutions

یکی از کاربرد‌های Probe، ذخیره نمودن خروجی مطلوب است. تیک ذخیره سازی تمامی متغیرها را بردارید و با تعریف Probe متناسب با خروجی مطلوب، حجم داده‌ی خروجی را به شدت کاهش دهید. در اینجا با استفاده از این روش، حجم دیتا از 5 به 3 مگابایت، کاهش می‌یابد، البته فراموش نشود که یک مگابایت حجم فایل اولیه بوده است!.

جمع بندی

در نهایت مطابق با جدول 2، خلاصه‌ی بحث، قابل مشاهده است.

سیملب سنتر
جدول2: خلاصه نتایج حاصل از بحث کاهش حجم داده خروجی

ویدئوی کاهش حجم فایل خروجی نرم‌افزار کامسول

References

دیدگاه بگذارید

برای درج دیدگاه، لطفا وارد شوید
  مشترک شدن  
اطلاع از