- مقدمه
در مواردی که تعریف ویژگیهای مدل وابسته به حل مسئله است، می توان از زیر برنامه های آباکوس استفاده کرد. از آنجایی که زیر برنامه ها در آباکوس توسط حلگرها فراخوانی می شوند، بنابراین زیربرنامه ها با توجه به حلگری که آنها را فراخوانی می کند به دو دسته اصلی تقسیم می شوند. دسته اول زیربرنامه ها توسط حلگر ABAQUS/ EXPLICIT و دسته دوم توسط حلگر ABAQUS / STANDARD مورد استفاده قرار می گیرند. با توجه به اینکه زیربرنامه ها به زبان فرترن نوشته می شوند، در این بخش ابتدا به معرفی زبان فرترن پرداخته خواهد شد. سپس با بررسی نکات عمومی زیربرنامه ها، به معرفی چند زیربرنامه خواهیم پرداخت.
- برنامه نویسی فرترن
این بخش دستورات مهم زبان برنامه نویسی فرترن برای زیر برنامه نویسی در اباکوس بیان خواهد شد.
این بخش شامل موارد زیر است:
- متغیرهای عددی و فرمان های تعیین خصوصیت آنها
- فرامین کنترل برنامه
- خروجی و ورودیها
- زیر برنامه و تابع در فرترن
- توابع کاربردی در فرترن
قبل از معرفی متغیرها در فرترن لازم است به این نکته توجه شود که فرترن بر خلاف پیتون به بزرگی و کوچکی حروف حساس نیست. زیربرنامه های آباکوس به صورت fix format نوشته می شود. بنابراین دستورات از کاراکتر ۷ آغاز می گردد. در صورت کامنت بودن یک خط می توان از از حرف C در ابتدای آن استفاده کرد و البته می توان در هر مکانی از علامت ! نیز به منظور کامنت کردن بقیه خط استفاده نمود. برای یادگیری زبان برنامه نویسی فرترن نسخه ویژوال فرترن مناسب است. با این وجود در نسخه های جدید نرم افزار آباکوس از کامپایلرهای Intel Fortran استفاده می شود. برای یافتن و یا اطمینان از نصب صحیح کامپایلر مورد نیاز، از طریق Command Prompt ویندوز و با توجه به مسیر نصب آباکوس (که در این مثال در درایو C نصب شده است)، به مسیر
C:\SIMULA\Abaqus\Commands
رفته و دستور
\Abaqus Information=System
را بنویسید. با اجرای این دستور نرم افزار آباکوس نیازمندی های خود را نوشته و مشخص می کند که چه نرم افزارهایی بطور مناسب نصب نشده اند.
- متغیرهای عددی و فرمان های تعیین خصوصیت آنها
متغیرها در فرترن می توانند صحیح، اعشاری و یا دارای حالت های دیگر باشند. با توجه به اینکه استفاده از متغیرهای غیر همنوع ممکن است باعث عملکرد اشتباه یک زیر برنامه شود، بنابراین لازم است در تعریف متغیرها دقت لازم انجام گیرد. نوع متغیر در فرترن با حرف اول آن مشخص می شود. در صورتی که متغیر با یکی از حروف
I, J, K, L, M, N, شروع شود، بطور پیش فرض عدد صحیح تلقی می شود. در غیر این صورت اعشاری با دقت معمولی فرض در نظر گرفته خواهد شد. در صورتی که بخام از انواع دیگر متغیرها بهره ببریم و یا نوع متغیر را بدون توجه به حرف اول آن مشخص کنیم
می توان از دستورات زیر استفاده کرد:
- اعداد صحیح (INTEGER):
اعداد صحیح با دستور INTEGER مشخص می شوند. نمایش عمومی این دستور بهصورت زیر است:
… و نام متغیر دوم و نام متغیر اول INTEGER
- اعداد اعشاری با دقت معمولی (REAL):
اعداد اعشاری با دقت معمولی ( هفت رقم اعشار) به صورت زیر مشخص می شوند.
و … , نام متغیر دوم , نام متغیر اول REAL
- اعداد اعشاری با دقت مضاعف (DOUBLE PRECISION):
اعداد اعشاری با دقت مضاعف (پانزده رقم اعشار) با استفاده از دستور زیر قابل تعریف است.
… و نام متغیر دوم ,نام متغیر اول DOUBLE PRECISION
- رشته (CHARACTER):
رشته ها در فرترن به صورت زیر تعریف می گردند:
نام متغیر تعداد حروف * CHARACTER
در صورتی که تعداد حروف مشخص نشود، برابر یک در نظر گرفته خواهد شد.
- IMPLICIT:
خاصی آغاز می شوند،
در صورتی که بخواهیم تمام متغیرهایی که با حرف یا حروف خاصی آغاز می شوند، ازنوع خاصی باشد، از دستور زیر استفاده می شود:
(حرف مورد نظر) نوع متغیر IMPLICIT
به عنوان مثال در دستور زیر تمام متغیرهایی که با حرف A آغاز می شوند INTEGER (عدد صحیح) خواهند بود:
IMPLICIT INTEGER (A)
و در مثال زیر متغیرهایی که با حروف B تا E آغاز می شوند از نوع اعشاری با دقت مضاعف خواهند بود.
IMPLICIT DOUBLE PRECISION (B-E)
- آرایه ها:
آرایه ها در فرترن به صورت زیر تعریف می شوند:
(ابعاد آرایه) نام آرایه DIMENSION
در مثال زیر یک آرایه صحیح ۱۰ عضوی تعریف شده است:
DIMENSIONI (10)
در مثال ذکر شده بدلیل اینکه نام آرایه با حرف I آغاز شده است، درایه های آن عدد صحیح خواهند بود. در صورتی که بخواهیم نوع آرایه را مشخص کنیم، باید بعد از مشخص کردن ابعاد آن، نوع آرایه را نیز مشخص کرد. به عنوان مثال آرایه ۱۰*۱۰ تعریف شده در مثال زیر، اعشاری با دقت مضاعف خواهد بود:
DIMENSION A (10,10) DOUBLE PRECISION A
البته می توان چنین آرایه ای را به صورت زیر نیز تعریف کرد:
DOUBLE PRECISION A (10,10)
- PARAMETER
متغیرها در طی برنامه ممکن است مقدارشان تغییر کند. با استفاده از دستور زیر می توان از تغییر مقدار یک پارامتر جلوگیری کرد:
(… و مقدار دوم = نام متغیر دوم , مقدار اول = نام متغیر اول) PARAMETER
- DATA:
صورتی که بخواهیم به یک آرایه مقدار اولیه بدهیم، استفاده از دستور DATA مفید است. به عنوان مثال ماتریس:
به صورت زیر مقدار دهی می شود:
DATA A\1,3,2,4\
در تعریف یک آرایه، ابتدا ستون اول و سپس ستون دوم و … مقداردهی می شوند. در صورتی که ماتریس A همگی برابر یک مقدار (مثلا ۱۰) باشند، دستور زیر استفاده می شود:
DATA A\4*10\
فرامین کنترل اجرای برنامه
در هر زبان برنامه نویسی، آشنایی با دستورات کنترل اجرای برنامه ضروری است. در صورت نیاز به کنترل روند اجرای برنامه مثل تکرار بعضی از خطوط، می توان از دستورات زیر کمک گرفت.
- GOTO:
دستور GOTO به منظور پرش اجرای برنامه به خطی خاص بکار می رود. دو فرمت اصلی این دستور عبارتند از:
- GOTO n
که این دستور اجرای برنامه را به ابتدای خطی که با عدد صحیح n مشخص شده انتقال می دهد.
GOTO (nl,n2,…),i
در صورتی که i با هر یک از مقادیر nj برابر باشد، اجرای برنامه به خط مشخص شده با nj منتقل خواهد شد.
- DO:
با استفاده از دستور D0 می توان مجموعه ای از دستورات را تکرار کرد. این دستور معمولا به دو صورت زیر بکار می رود:
۱٫
DO n I= first, end, step
…….
…….
n CONTINUE
در این دستور، n شماره خطی است که انتهای بدنه حلقه D0 را نشان می دهد. معمولا برای جلوگیری از اشتباه از دستور CONTINUE در این خط استفاده می گردد. I شمارنده حلقه بوده و مقادیر first و end ابتدا و انتهای بازه ۱ را نشان می دهد. مقدار step نیز گام متغیر آرا نشان می دهد. باید توجه داشت که نوع متغیر و ابتدا و انتها و گام متغیر همگی باید از یک نوع متغیر باشند. حلقه DO را می توان به صورت زیر نیز نوشت.
۲٫
DO I= first, end, step
…….
…….
END DO
در صورتی که بخواهیم یک حلقه در صورت برقرار بودن شرطی اجرا گردد، دستور DO WHILE مفید خواهد بود. ساختار این دستور عبارت است از:
(عبارت منطقی) DO WHILE
END DO
دستور exit برای خارج شدن از یک حلقه، بدون ارضای شرایط حلقه، بکار می رود.
- IF
ساختار کلی دستور شرطی IF بصورت زیر است:
THEN (عبارت منطقی) IF
…….
…….
THEN (عبارت منطقی) ELSE IF
…….
…….
ELSE
…….
…….
END IF
باید دقت شود که از شرط اتمام برنامه که با END نشان داده می شود در دستورات فوق استفاده نگردد.
- خروجی
در برخی موارد لازم است که به منظور کنترل صحت زیربرنامه آباکوس، برخی اطلاعات در فایلی ذخیره شود. برای این منظور از دستور write و print می توان استفاده کرد. فرم ساده و کاربردی دستور print به صورت زیر است:
… , متغیر , متغیرا ,* Print
البته به جای متغیر می توان عدد و یا رشته نیز جایگزین کرد. در آباکوس حاصل دستور فوق در یک فایل با نام Job name).log) ذخیره می شود. از دستور write نیز می توان برای نوشتن اطلاعات در یک فایل خارجی استفاده کرد.
برنامه های فرعی در فرترن
در بسیاری از موارد لازم است برای جلوگیری از بکار بردن دستورات تکراری، از برنامه های فرعی استفاده شود. برنامه های فرعی در فرترن به سه دسته تقسیم می شوند:
- برنامه های فرعی یک جمله ای، تعریف این برنامه های فرعی به صورت زیر است
عبارت منطقی = (… ورودی ۲، ورودی ۱) نام تابع
مثال:
SUM(A,B,C)=A+B+C
…….
…….
S=SUM(10,4,6)
برنامه های فرعی تک جمله ای بعد از دستورات غیر اجرایی و قبل از دستورات اجرایی نوشته می شود. قواعد حاکم بر نام متغیرها بر نام برنامه های فرعی تک جمله ای نیز حاکم است.
- توابع: فرم کلی تری از برنامه های فرعی یک جمله ای است که در بعد از برنامه اصلی نوشته می شود. با توجه به اینکه در نام تابع مقداری قرار داده می شود،
بنابراین قواعد حاکم بر نام آنها مشابه قواعد حاکم بر نام متغیرها است. ۳. خصوصیات توابع در ابتدای برنامه اصلی و هنگام تعریف آنها تعیین می گردد.
(مشابه تعیین خصوصیات متغیرها). توابع مستقل از برنامه اصلی بوده و فرم کلی آن به صورت زیر است:
(ورودیهای تابع) نام تابع FUNCTION خصوصیت تابع
دستورات تابع
END
مثال:
REAL FUNCTION SUM(A,B) SUM = A+B+C END
با به کار بردن نام توابع در داخل برنامه اصلی می توان آنها را فراخوانی کرد. و زیر برنامه ها مانند توابع برنامه هایی مستقل از برنامه اصلی هستند. در نام زیر برنامه ها
بر خلاف توابع هیچ مقداری ذخیره نمی شود. فرم کلی زیر برنامه ها به صورت زیر است:
SUBROUTINE ‘NAME’ (VARIABLES)
body
END
که منظور از NAME ، نام زیر برنامه است. زیربرنامه ها در برنامه اصلی از طریق دستور زیر فراخوانی می شوند:
CALL ‘NAME’ (variables)
هم در توابع و هم در زیربرنامه ها می توان در هر جای برنامه با استفاده از دستور RETURN به برنامه اصلی بازگشت.
- مروری بر توابع کاربردی
برخی توابع کاربردی موجود در فرترن عبارتند از:
- تابع (Abs(variable
INTEGER , DOUBLE قدر مطلق یک متغیر را بدون تغیر در خصوصیت متغیر ( … ,PRECISION) می دهد.
- تابع ( Int(variable
قسمت صحیح متغیر اعشاری را به صورت یک متغیر صحیح میدهد.
- تابع ( Aint(variable
سمت صحیح متغیر اعشاری را به صورت یک متغیر اعشاری میدهد.
- تابع ()REAL
مقدار متغیر را به صورت اعشاری می دهد.
- تابع ( nInt(variable
متغیر اعشاری را به صورت گرد کرده و بصورت یک متغیر صحیح می دهد.
- Anint(variable)
متغیر اعشاری را به صورت گرد کرده و به صورت یک متغیر اعشاری میدهد.
- تابع ()Matmul
ضرب دو ماتریس و یا بردار انجام می دهد.
- تابع ()Dot _ product
این تابع ضرب داخلی دو بردار را محاسبه می کند.
- تابع خارج قسمت ()Mod
- تابع تصادفی ()Random
- تابع جذر ()Sqrt
علاوه بر آنچه گفته شد، توابع مثلثاتی و هایپربولیک () Sin ( ) Atan ( ) ، Acos () ، Cosh ( ) ، Sinh ( ) ، Cotan ( ) ، Tan ( ) ، Cos و ()Tanh نیز در فرترن تعریف شده اند. تابع EXPO نیز از توابع مهم ریاضی موجود در فرترن است.
امید است آنچه در مورد برنامه نویسی در فرترن گفته شد، برای زیر برنامه نویسی در آباکوس کافی باشد. در ادامه به روند برنامه نویسی در آباکوس پرداخته خواهد شد.
- کلیات زیر برنامه نویسی در آباکوس
یکی از مهمترین قابلیت های آباکوس، امکان نوشتن زیر برنامه در آن است. در بسیاری از نرم افزارهای تجاری موجود، هنگامی که شرایط مرزی وابسته به نتایج حل است، ناگزیر به قطع حل مسئله و تعریف مجدد شرایط مرزی هستیم. در آباکوس با کمک زیربرنامه های در نظر گرفته شده نیازی به قطع کردن حل نیست. بنابراین علاوه بر دقت مناسب در اعمال شرایط مرزی، سرعت حل مسئله نیز به مراتب بالاتر خواهد بود. امید است که خوانندگان با مطالعه این بخش بتوانند از تمامی زیر برنامه های آباکوس با کمک help نرم افزار بهره ببرند ( البته استفاده از برخی زیربرنامه ها نیازمند اطلاعات تئوری خاصی است که فرض بر آن است که خوانندگان از آن آگاه هستند). برای این منظور در این بخش به بررسی نکات مشترک زیر برنامه ها پرداخته خواهد شد. سپس در قسمت های بعد، چند زیربرنامه به عنوان مثال معرفی می شوند.
استفاده از زیر برنامه را می توان به ۳ مرحله زیر تقسیم کرد.
در مرحله اول باید زیر برنامه را با فرمت خاص خود و به زبان فرترن نوشت. برای این منظور استفاده از help اجتناب ناپذیر است. توضیحات مربوط به زیر برنامه ها در قسمت Abaqus User Subroutines Reference Manual قرار دارد. با مراجعه به این قسمت و در بخش User Subroutines خواهید دید که در آباکوس دو دسته زیربرنامه وجود دارد که هر دسته مربوط به یکی از حلگرهای Explicit و یا Standard است. با مشاهده هر بخش خواهید دید که بطور کلی help نرم افزار آباکوس برای هر زیربرنامه شامل قسمتهای اساسی زیر است:
- Overview:
در این قسمت امکانات و محدودیت های زیر برنامه توضیح داده می شود. هر کاربر باید ابتدا با مطالعه این قسمت مطمئن شود که زیر برنامه مورد نظر توانایی های مورد نظر را دارد.
- User subroutine interface :
در این بخش یک برنامه کلی وجود دارد که قسمت اول آن به تعریف زیربرنامه و نوع متغیرهای موجود می پردازد. قسمت دوم که باuser coding to define مشخص شده است، بخشی است که کاربر باید برنامه خود را در آن وارد کند. بنابراین تنها این قسمت از زیر برنامه تغییر می کند.
در زیر برنامه های مربوط به حلگر explicit این قسمت درون یک حلقه قرار می گیرد. علت این امر این است که در این حلگر، زیر برنامه برای چندین نقل محاسباتی در یک مرحله استفاده می شود. برای نوشت زیربرنامه، کاربر باید این برنامه کلی را به طور کامل به و برای خود منتقل کرده و برنامه مورد نظر خود را در قسمت دوم وارد کند.
- .Variables to be defined
این بخش مربوط به معرفی کمیتی است که باید توسط کاربر تعیین گردد و عملا هدف زیر برنامه تعیین این کمیت است. بنابراین کاربر باید این قسمت را حتما با دقت مطالعه کند.
- .Variables that can be updated
در برخی زیربرنامه ها تعریف برخی کمیات می تواند توسط کاربر و یا آباکوس انجام گیرد. مطالعه این قسمت در صورت نیاز توصیه می شود.
- Variables passed in for information
هدف از زیربرنامه نویسی تعیین یک پارامتر از مدل بر اساس نتایج حل است. این قسمت از help به معرفی پارامترهایی می پردازد که برای استفاده در زیر برنامه به کاربر داده شده است و امکان تغییر در آنها وجود ندارد (در صورت تغییر این پارامترها، برنامه دچار مشکلات غیر قابل پیش بینی خواهد شد). معمولا تعداد این پارامترها زیاد بوده و بنابراین توصیه می شود که کاربران با توجه به نیاز خود تنها پارامترهای مورد نیاز خود را مطالعه کنند. معمولا نام پارامترها گویای کمیتی است که در خود ذخیره کرده اند.
در برخی زیربرنامه ها قسمت های دیگری نیز وجود دارد که با توجه به نیاز کاربر قابل استفاده اند. در حلگر ABAQUS / STANDARD زیر برنامه برای هر نقطه محاسباتی یکبار فراخوانده می شود ولی در ABAQUS / EXPLICIT برای تعدادی از نقاط محاسباتی این فراخوانی انجام می گیرد. در این حالت تعداد نقاط محاسباتی در هر فراخوانی برابر متغیر nblock است. بنابراین محاسبات برای هر یک از مجموعه نقاط فراخوانی شده باید انجام گیرد. برای این منظور در زیر برنامه های مربوط به این حلگر، یک حلقه به صورت زیر مشاهده می شود:
do 100 k = 1, nblock
۱۰۰ continue
- مرحله دوم استفاده از زیر برنامه، باید کاربرد زیر برنامه برای مدل تعریف شود. به عبارت دیگر باید مشخص شود که در تعریف مدل، زیر برنامه چه وظیفه ای دارد. به عنوان مثال اگر زیر برنامه ای برای تعریف بار گذاری استفاده می شود، باید step و مکان بارگذاری مشخص شود. امکان انجام این تنظیمات برای برخی از زیر برنامه ها در محیط گرافیکی وجود دارد و برای برخی دیگر این تنظیمات تنها در فایل inp انجام می گیرد. واضح است که در صورت انجام تنظیمات در فایل inp، هنگام ساختن job باید قسمت Source را فایل inp مربوطه انتخاب کرد (شکل ۱).
شکل ۱. ساختن job از فایل inp
- مرحله سوم استفاده از زیر برنامه مربوط به معرفی کردن زیر برنامه به job است. برای این منظور در هنگام تعریف job و در محل نشان داده شده در شکل۲، آدرس فایل داده می شود.
شکل ۲٫ مشخص کردن ادرس زیر برنامه
جهت رفع سوالات و مشکلات خود از سیستم پشتیبانی سایت استفاده نمایید .
دیدگاه ارسال شده توسط شما ، پس از تایید توسط مدیران سایت منتشر خواهد شد.
دیدگاهی که به غیر از زبان فارسی یا غیر مرتبط با مطلب باشد منتشر نخواهد شد.