epsi1on
epsi1on
خواندن ۷ دقیقه·۹ ماه پیش

مختصری از مهندسیِ نرم‌افزهایِ روش اجزاءِ محدود: تحلیل شی‌گرایی - قسمت اول

برای دیدن فهرست باقی نوشته‌های این مجموعه به قسمت اول (کلیات) بروید

اوپس! مخفف Object Oriented Programing بعلاوه‌ی یک عِس اضافه
اوپس! مخفف Object Oriented Programing بعلاوه‌ی یک عِس اضافه




مقدمه

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

خوب اگر من بخوام یک کتابخانه‌ی اجزا محدود پیاده سازی کنم به نظرم اولین چیزی که باید بهش بپردازم حد و حدود پروژه هست. المان‌محدود دامنه‌های مختلفی داره. تحلیل مغناطیس (برای یافتن میدان مغناطیسی)، تحلیل جامدات (تحلیل تنش و کرنش) و چیزهایی که من نمیدانم. از یک بُعد دیگه تحلیل اجزامحدود به دو بخش خطی و غیرخطی تقسیم میشه. روش خطی بسیار ساده‌تر هست چون با یک دستگاه مختصات خطی سر و کار داریم و معمولا این دستگاه به سادگی قابل حل هست. ولی روش غیر خطی معمولا به روش تکراری عمل میکنه و در هر تکرار یک دستگاه خطی رو حل میکنه و به گام بعدی میره. به خاطر آشناییم المان محدود خطی جامدات تصمیم گرفتم المان محدود خطی جامدات رو پیاده کنم. نکته‌ی خوب در مورد المان محدود این هست که به نوعی خودش با توجه به مسایلی مثل شی‌گرایی ساخته شده و عِلمش پیشرفت کرده پس تحلیل شی‌گرایی خیلی ساده‌ای خواهد داشت. اگر خواننده عزیز با مسایلی مثل ارث‌بری (polymorphism) و کپسوله‌سازی و جعبه‌ی سیاه (encapsulation & black box) که در برنامه نویسی مورداستفاده هستن آشنایی نداره خواهش میکنم قبل از ادامه در مورد اینها کمی مطالعه کنه و حداقل یکی دو مثالش با سی‌شارپ رو بررسی کنه.


و اما اصل مطلب

خوب توی المان محدود ما مفهومی کلی بنام اِلِمان (element) یا معادل فارسی‌اش جزء رو داریم. معمولا المان‌ها در فضا حجمی رو اشغال میکنند. مفهوم دیگری بنام گره داریم که هر گره یک سری خصوصیات داره مثل حالت قید‌هاش. مفهوم دیگر نیروها هستن که به دو گروه تقسیم میشن: نیروهای گره‌ای و نیرو‌های وارده بر اجزا.

نیرو‌ها

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

در روش FEM (یا همون المان‌محدود یا Finite Element Method) روند اینطوری هست که نیرو‌هایی که به جزئمون به صورت داخلی وارد میشه باید تبدیل به نیرو‌های معادل گره‌ای بشه چون روش FEM نمیتونه نیرو‌های غیر گره‌ای رو در نظر بگیره. ما در نهایت یک ماتریس سختی و دو بردار نیرو و تغییر مکان خواهیم داشت که معادل نیرو و تغییر مکان گره ای هستن. همه نیروها مشخصه ای بنام نوع دارن. مشخصه‌ی نوع بعدا توی ترکیب بار به دردمون خواهد خورد که یکی از الزامات طراحی سازه‌ی ساختمان هست و مهندسای عمران خیلی باهاش سر و کار دارن. ما به نوع بار میگیم LoadCase.

نیروی گسترده

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

نیروی متمرکز اِلِمانی

نیرویی هست که به داخل یا بدنه‌ی المان وارد میشه. ولی فقط به یک نقطه‌ی مشخص داخل المان وارد میشه

نیروی متمرکز گره‌ای

این نیرو فقط به گره‌ها وارد میشه. خیلی شبیه به نیروی متمرکز عیلامانی هست ولی با این تفاوت که فقط به گره‌ها وارد میشه.

اِلِمان‌ها (Elements)

مدل‌های مختلفی از المان‌ها رو هم داریم. مثل تیر، خرپا، مثلث قشایی، مثلث خمشی. المان قاب از ترکیب دو المان تیر در دو راستای مختلف و یک المان خرپا و یک المان پیچشی تشکیل میشه. یک کلاس به نام Element در نظر گرفته شد بعنوان کلاس پایه برای تمام عِلِمان ها! برای سادگی سه نوع المان در نظر گرفته شد که از این کلاس پایه مشتق می‌شوند. نقطه مشترک همه‌ی المان‌ها این هست که ماتریس سختی دارن و ما از این ماتریس سختی برای سوارکردن ماتریس سختی کل استفاده خواهیم کرد.

المان یک‌بعدی میله (BarElement)

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

المان دوبعدی مثلث (TriangleElement)

المان بَعدی مثلت هست. توی فضای سه بعدی، سه تا گره رو به هم متصل میکنه. ولی دو بُعد داره ایکس و ایگرگ. البته بُعد زِد هم داره یعنی ضخامت ولی اون رو فعلا در نظر نمیگریم.

المان سه بعدی هِرَمی (TetrahedronElement)

این المان سه بعدی هست و چهار گوشه داره و چهار گره رو در فضای سه بعدی به هم متصل میکنه.


المان‌های قِیدِ چند‌ نقطه‌ای (Multy Point Constraint یا MPC)

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


گره‌ها

یکی از چیزهای اصلی همین گره هست. اگر کمی با المان‌محدود آشنا باشید با ماهیت‌اش بیشتر آشنا هستید. گره در اصل نقاطی در فضای سه بعدی هستن که المان‌ها اون‌ها رو به هم متصل میکنن. در FEM هر گره یک خصوصیاتی داره. یکی از خصوصیاتش مکان نقطه در فضای سه‌بعدی هست. یعنی سه مولفه ی x و y و z. خصوصیت بعدی قید‌هاش هست. بعضی گره‌ها به زمین متصل هستن مثل پای یک ستون. این گره ها تغییر مکانی نخواهند داشت چون وصل به زمین هستن. خصوصیت دیگر گره‌ها نشست‌های تکیه گاهی هست.

بعد از اتمام تحلیل، درجات آزادیِ غیرمقید دارای تغییر مکانی خواهند بود که طی تحلیل محاسبه شده.

ماتریس

ما با ماتریس خیلی سر و کار داریم. بخش قبلی در مورد ماتریس Sparse بود. ما ماتریس Dense هم نیاز داریم پس دو تا کلاس هم برای این دو در نظر میگیریم. البته چون از کتابخانه‌ی CSParse.NET استفاده کردیم جزیاییش به ما ربطی نداره :)


نرم افزارشی گراییرابط کاربری
ذره‌ای کوچک در هستی
شاید از این پست‌ها خوشتان بیاید