هدف آموزش: در این آموزش شما با مفاهیم سابروتین در آباکوس، اینکه UMAT چیست؟ سابروتیننویسی در آباکوس، تعریف ماده دلخواه در آباکوس، آموزش اصول و پیاده سازی سابروتین UMAT در آباکوس و اصول User Material Subroutine آشنا خواهید شد.
همنیازها: در تاریخ 17 آبان 95 آموزشی تحت عنوان “سابروتیننویسی در آباکوس” در سایت درج شد که به واکاوی اجزای اصلی سابروتین در آباکوس و معرفی برخی سابروتین های معروف و پرکاربرد در آباکوس پرداخته است.
روشهای تعریف متریال در آباکوس
همانطور که پیشتر نیز اشاره کردیم، تعیین خواص مکانیکی ماده و اختصاص آن به قطعه مورد نظر برای تحلیل در ماژول Property انجام میشود. چنانچه ماده رفتاری الاستیک داشته باشد کافیست تنها مدول یانگ و ضریب پواسون ماده را در نرمافزار وارد کنیم تا تحت هر بارگذاری مکانیکی، منحنی تنش – کرنش خطی را مشاهده نماییم. چنانچه رفتار الاستیک – پلاستیک کامل در ماده وجود دارد، علاوه بر تعیین خواص الاستیک فوق، معرفی تنش تسلیم ماده نیز ضروری است.
همچنین اگر بخواهیم رفتاری دقیقتر در ناحیه پلاستیک داشته باشیم، میتوانیم منحنی تنش – کرنش ماده را بهصورت نقطه به نقطه در این ماژول وارد کنیم. به نظر میرسد تا اینجای کار با مشکل خاصی مواجه نیستیم. مجموعه رفتارهای مکانیکی متداول (مانند خزش، شکست ترد و نرم، شکست در کامپوزیتها و . . .) در نرمافزار تعبیه شده است و کاربر میتواند بسته به نیاز خود از آنها استفاده کند.
لزوم استفاده از کدنویسی در تعریف رفتار ماده در آباکوس
با پیشرفت تئوریهای موجود در شاخههای مختلف علم و ارائه معیارهای متنوع برای نشان دادن رفتار مکانیکی ماده تحت حالات خاص، استفاده از تئوریهای گنجانده شده در نرمافزار Abaqus امکانپذیر نخواهد بود. در واقع در طیف تقریباً وسیعی از مسایل نمیتوان از تئوریهای موجود در نرمافزار آباکوس برای پیشبینی رفتار ماده در بارگذاری دلخواه استفاده نمود. اما جای نگرانی وجود ندارد. چنانچه بخاطر داشته باشید، در بخش خصوصیات و برتریهای آباکوس در حوزه تحلیل اجزاء محدود به قابلیت برنامهنویسی و اتصال نرمافزارهای این شاخه به آباکوس اشاره کردیم. اگر از مدل ماده خاصی استفاده میکنید و آباکوس آنرا ارائه نداده است خودتان باید دست بکار شوید.
سابروتین UMAT چیست؟
سابروتین UMAT یا User MATerial نامی است که آباکوس برای مدلهای ماده که توسط کاربران برنامهنویسی میشود، اختصاص داده است. UMAT در حالت Implicit و VUMAT معادل آن در حالت تحلیل Explicit است. در سابروتین UMAT شما باید رفتار ماده را با استفاده از تئوریهای مدنظرتان در قالب یک کد فرترن (for.) به آباکوس معرفی کنید. در واقع شما با این برنامه، به نرمافزار میگویید که تحت این مقدار نیرو یا جابجایی، ماده چه رفتاری از خود نشان دهد، میزان تنش و کرنش چقدر باشد، چه زمانی به تسلیم برسد و تحت چه شرایطی شکست یا خستگی رخ دهد. حال، زمانی که آباکوس قصد اعمال بار و محاسبه تنش و کرنش را داشته باشد، برنامه شما را فرا میخواند و گام به گام پیش میرود. میتوانید تصور کنید که این کار تا چه اندازه پیشرفته و دقیق است، شاید قیاسی بهتر از عمل قلب باز برای آن پیدا نکنیم !
قابلیت برنامهنویسی تنها محدود به مدل ماده نمیشود و میتوان در خصوص اعمال بار و سایر موارد نیز از آن بهره جست اما برنامهنویسی مدل ماده جزء پیشرفتهترین مباحث آکادمیک است و در مقاطع تحصیلات تکمیلی تدریس میشود و نیازمند آشنایی با مباحث مکانیک محیطهای پیوسته، جبر تانسوری و نیز پلاستیسیته در سطوح عالی است. فراموش نکنید برای این کار حتماً باید کامپایلر زبان فرترن را نصب و آن را با آباکوس لینک کنید (روش این کار در مقاله آموزشی نحوه لینک کردن آباکوس و فرترن شرح داده شده است.).
پیشنهاد میکنیم آموزش اسکریپتنویسی با پایتون در آباکوس را هم از دست ندهید!
با سلام و خسته نباشید
من یک معیار شکست رو به صورت یک سابروتین vumat نوشتم و قسمت تکامل آسیب یا همون Damage Evolution رو هم می خوام کد نویسی کنم. می خواستم بپرسم که نرم شدن و تنزل سفتی ماده (Material Degradation) از مرحله شروع آسیب (Damage Initiation) که با پارامتر D نشان داده می شود، هم بر روی مدول الاستیسیته و هم بر روی تنش تسلیم اثر می کند؟ و اثر این پارامتر بر هر دوی این ها به یک صورت و به صورت زیر می باشد؟
(E = E * (1 – D
(Sy = Sy * (1 – D
با تشکر.
سلام
ممنونم از شما
وقتی که روی بحث Dmage کار کردهاید باید با الفبای اولیه بحث آشنا باشید؛ کدنویسی چیزی جز پیادهسازی عددی تئوری نیست
توصیه میکنم مجدداً تئوریهای مکانیک آسیب را از کتاب Engineering Damage Mechanics لمتر مطالعه کنید
موفق باشید . . .
با سلام.
این پیغام به چه معنی هست:
WARNING: Unable to determine if Fortran Compiler is present.
Making C:\SIMULIA\Abaqus\6.14-1\installation_info\verify. All verification
files will reside in this directory.
سلام
لینک فرترن و آباکوس بدرستی انجام نشده
با سلام
من ی ورق سه لایه فلزی رو میخوام تو اباکوس مدل کنم ،یعنی نمونه کشش رو تحت کشش تک محوره(طولی)مدل کنم و لایه ی وسط خواصش ناهمسانگرد هست و میخوام ک تنش در جهت عرض این کامپوزیت رو بررسی کنم بعد از ران گرفتن،میخواستم ببینم باید از umat استفاده کنم یا نیازی نیست ؟(نتایج و داده های تست های کشش تجربی رو برای هر کدام از ورق ها و خود کامپوزیت هم دارم)اگه امکان داره راهنماییم کنید
ممنون
سلام
در خصوص مدلسازی کامپوزیت مثال آموزش در سایت موجوده، میتونید استفاده کنید:
مدلسازی رشد ترک در مواد کامپوزیت با آباکوس
موفق باشید . . .
سلام وقتتون بخیر
وقتی درون سابروتین یومت، state variable داشته باشیم (مثلا متغیر آسیب)، پس از گرفتن job چطوری میتونیم اون متغیر مورد نظر در نتایج مشاهده کنیم و به عنوان نتایج خروجی اون ها را استخراج کنیم؟
با تشکر فراوان از مطالب آموزنده تان
سلام
در ماژول step، بخش Field Output Request تیک گزیته SDV که معرف solution dependent state variable است را فعال کنید (در زیر بخش State/Field/User/Time) ؛ متغیرهای حالت ثبت شده و قابل نمایش خواهند بود
خیلی ممنونم.
سلام و عرض ادب
برای بررسی تخمین عمر خستگی با استفاده مکانیک آسیب در حال کدنویسی هستم. برای همین منظور از سابروتین های umat برای تعریف آسیب و UAMP برای بارگذاری استفاده میکنم. با توجه به این موضوع، بخش step به صورت general static باید تعریف شود یا به صورت dynamic implicit و یا مورد دیگر تعریف گردد؟ و اینکه عدد time period را با توجه به چه چیزی مشخص کنم؟
خیلی ممنونم از شما.
سلام
انتخاب نوع حلگر به ماهیت مسئله شما بستگی داره؛ اگر مسئله شما استاتیک یا شبه استاتیک باشه میتونید از general static استفاده کنید، اگر هم مسئله دینامیکه که از حلگر Dynamic استفاده کنید
Time در مسائل استاتیکی معیاری برای تقسیم فرایند حله و لزوما با مقدار زمانی مسئله شما در واقعیت یکسان نیست؛ مثلا اگر شما قراره 100 سیکل را طی کنید میتونید 1 ثانیه زمان در نظر بگیرید و با amplitude، اسکریپت نویسی یا سابروتین نویسی این زمان را بین 100 سیکل خودتون تقسیم کنید
همچنین میتونید 100 عدد step مجزا ایجاد کنید و هر سیکل را در یک step اعمال کنید
حلگر Explicit زمان معنی واقعی به خودش میگیره، اگر مسئله شما در واقعیت n واحد زمانی طول کشیده، اینجا هم باید همون مقدار لحاظ بشه
موفق باشید
سلام آقای مهندس وقتتون بخیر
پیشاپیش به دلیل طولانی بودن سوال و عدم احتمالی هماهنگی پرسش با این بخش عرض خواهی میکنم
(به علت استفاده از سابروتین umat و در ادامه سوال قبلی خودم، این پرسش را نیز اینجا مطرح کردم)
همان گونه که در سوال قبلی خدمتتان عرض کردم برای بررسی عمر خستگی با استفاده از مکانیک آسیب، در حال استفاده از سابروتین های umat برای تعریف آسیب و UAMP برای بارگذاری هستم. پس از job گرفتن ، run به صورت کامل انجام شده منتهی همه نتایج صفر است و در قسمت warning پیغام زیر نشان داده می شود. (ورژن اباکوس بنده 6.14 است)
Note that the number of arguments for user subroutines uamp and vuamp have been changed for v6.12. The arguments nprops and props have been added. If the number of arguments are incorrect, then the analysis will not run properly. Please read the abaqus user subroutines reference manual for more details.
Amplitude, definition=user has been specified in the input file. This amplitude type is not supported for modal procedures and steady-state dynamic analysis with the response computed directly in terms of the physical degrees of freedom. It will be ignored if it is used with any of those procedures.
بنده برای بررسی سابروتین ها از umat صرف نظر کردم و تنها بارگذاری با سابروتین UAMP را برای یک المان مکعبی از ماده ایزوتروپیک بکار گرفتم که مجددا با همان مشکل مواجه می شوم (نتایج صفر و همان پیغام warning داده می شود)
هدف بنده اعمال بارگذاری به صورت چرخه ای می باشد
اگر ممکن است در خصوص اعمال سابروتین UAMP برای بارگذاری نوسانی توضیح بفرمایید؟، و اینکه آیا ممکن است بنده کد UAMP را درست نوشته ام اما در نحوه تعیین step (یک step استاتیکی با زمان دوره 1 تعریف کردم) و یا نحوه اعمال سابروتین UAMP برای بارگذاری نوسانی و یا از این قبیل اشتباهات در محیط cae داشته باشم که نتایج صفر می شود؟
خواهشمندم در صورت امکان توضیحی در مورد اشکال بنده و اعمال سابروتین UAMP برای بارچرخه ای بفرمایید
ممنون از حسن نظرتان
با تشکر و سپاس فراوان
سلام
چه حلگری برای تحلیل در نظر گرفته اید؟
نوع بارگذاری و مدل آسیب را از روی یک پایان نامه خارجی دارم شبیه سازی می کنم. در اونجا اشاره کرده بود که از المان های C3D20R, استفاده شده. بنده از حلگر اباکوس استاندارد و یک step بصورت general,static با time period 1 تعریف کردم.
احتمالا مشکل از uamp باشه
من برای مثال یک نمونه uamp مثلثی مینویسم که مثلا در زمان صفر جابجایی از مینیمم دامنه شروع کنه، در زمان T/2 به مقدار ماکزیمم دامنه برسه و در زمان T مقدارش مجددا به مینیمم دامنه برسه
شما سعی کنید کد خودتون را با این سابروتین مقایسه کنید، الگو بگیرید و مشکل را پیدا کنید
Real*8 Amax,Amin,T,n
Parameter(T=1. , Amax=1.)
n=idint(time(1)/T)
IF(time(1)>n*T .AND. time(1)(2.*n+1.)*(T/2.) .AND. time(1)<=(n+1.)*T)THEN
AmpValueNew=((Amin-Amax)/(T/2.))*(time(1)-n*T)+2.*Amax-Amin
ENDIF
جسارتا آقای مهندس سابروتین UAMP که نوشتم ساده هستش و کد آن برای بارگذاری چرخه ای را بصورت زیر نوشتم
omega = 2.d0*3.141592654d0
med = 0.d0
amp = 100.d0
fun = sin(omega*(time(iStepTime)-int(time(iStepTime))))
AmpValueNew = med+amp*fun
با تشکر و سپاس فروان از حسن نظرتان
خیلی ممنون اقای مهندس. لطف کردید.
موفق باشید
با سلام و عرض ادب احترام خدمت جناب آقای مهندس سروری
ابتدا کمال تشکر و سپاس را از پاسخگویی شما در مورد سوالات دارم.
در بارگذاری uamp مثلثی که نوشته اید چندین سوال و اشکال دارم که از محضرتان میپیرسم
1- n تعداد چرخه بارگذاری را نشان می دهد؟
2- (1)time در واقع همان (time(iStepTime) است ؟
3- T دوره تناوب بارگذاری است که یک در نظر گرفته شده؟
بنده کد را ران گرفتم اما با ارور مواجه شدم سپس سعی کردم برای n چرخه یا استفاده از بارگذاری مثلثی بنویسم اما مجدد با ارور مواجه شدم
کدی که بنده اضافه کردم :
Real*8 Amax,Amin,T,n
Parameter(T=1. , Amax=1. , Amin=-1.)
n=idint(time(1)/T)
IF (time(1) .ge. n*T .AND. time(1) .lt. (2.*n+1.)*(T/2.) THEN
AmpValueNew=((Amax-Amin)/(T/2.))*(time(1)-n*T)+Amin
ELSE IF (time(1) .ge. (2.*n+1.)*(T/2.)
* .AND. time(1) .le. (n+1.)*T) THEN
AmpValueNew=((Amin-Amax)/(T/2.))*(time(1)-n*T)+2.*Amax-Amin
END IF
RETURN
END
اروری هم که در log میدهد به شرح زیر است
ifort: command line warning #10130: unknown extension ‘A’ ignored in option ‘/Qax’
ifort: command line warning #10130: unknown extension ‘V’ ignored in option ‘/Qax’
ifort: command line warning #10130: unknown extension ‘X’ ignored in option ‘/Qax’
KUAMP.for(44): error #5082: Syntax error, found IDENTIFIER ‘THEN’ when expecting one of: * ) :: , ; + . – (/ [ : ] /) ‘ ** / // > .LT. …
IF (time(1) .ge. n*T .AND. time(1) .lt. (2.*n+1.)*(T/2.) THEN
——————————————————————-^
KUAMP.for(46): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: )
ELSE IF (time(1) .ge. (2.*n+1.)*(T/2.)
———————————————^
KUAMP.for(47): error #5277: Unbalanced parentheses
* .AND. time(1) .le. (n+1.)*T) THEN
————————————–^
KUAMP.for(47): error #5082: Syntax error, found ‘*’ when expecting one of: ; BLOCK BLOCKDATA PROGRAM MODULE TYPE COMPLEX BYTE …
* .AND. time(1) .le. (n+1.)*T) THEN
———^
KUAMP.for(47): error #5082: Syntax error, found ‘(‘ when expecting one of:
* .AND. time(1) .le. (n+1.)*T) THEN
——————————^
KUAMP.for(47): error #5082: Syntax error, found ‘*’ when expecting one of: ( ) :: , ; %% : . / = =>
* .AND. time(1) .le. (n+1.)*T) THEN
————————————^
compilation aborted for KUAMP.for (code 1)
با تشکر و سپاس فراوان از شما و مطالب بی نظیرتان
1 – بله
2- بله، زمان مربوط به step-1 است
3- بله
خطاها در دستورات فرترن رخ داده (Syntax error است)؛ میتونید بررسی و اصلاح کنید
خیلی ممنون آقای مهندس.
سلام آقای مهندس خسته نباشین
در مورد بارگذاری چرخه ای که در پاسخ های قبلی نوشته اید، چطور میتونیم تعداد سیکل دلخواه مثلا ۹۰۰ تا سیکل در مدت زمانی مثلا time period=5 داشته باشیم؟ داخل کدی که نوشته اید از ابتدا باید n را برابر تعداد سیکل مورد نیاز قرار بدیم؟
سلام
این یک سابروتینه
خیلی ساده تر و با پایتون هم میتونید تعداد سیکل بالا اعمال کنید
در این کد n تعداد سیکل مورد نظر است
ممنون مهندس
بله متوجه منظورتون شدم. در واقع سوالم اینه که، اگه بخواهیم همین سابروتین رو برای تعداد 900 سیکل در مدت زمان 5 ثانیه اعمال کنیم، تنها کافیه که در این کد T را برابر با 1/180 قرار دهیم؟
متشکرم.
بله
خیلی ممنون
موفق باشید
سلام و درود خدمت جناب آقای مهندس سروری
فرض کنید که به مدلی بارگذاری چرخه ای (نوسانی) وارد میشه. چگونه میتونیم بیشینه و کمینه تنش را در هر چرخه بارگذاری، در سابروتین UMAT حساب کنیم ؟ (چون یک متغیری داریم که رابطه اش بر اساس بیشینه و کمینه تنش در هر چرخه بارگذاری هست)
با تشکر و سپاس فراوان
سلام
تعدادی utility subroutine شناخته شده برای آباکوس وجود داره که میتویند ازشون استفاده کنید
یکی از این سابروتینها که برای هدف شما مناسبه، سابروتین SINV است
در Documentation با همین کلیدواژه سرچ کنید؛ قالب کلی و نحوه استفاده شرح داده شده
موفق باشید
Bad Material definition in element number 39 instance PART-1-1: zero or negative initial dilatational modulus caused by bad material data. Please check your material input and any initial conditions if necessary.
سلام این ارور موقع ران گرفتن از کد ویومت پیش میاد علتش چیست
سلام
پارامترهایی که برای ماده وارد کرده اید مشکل داره
zero or negative initial dilatational modulus caused by bad material data. Please check your material input and any initial conditions if necessary.
مجدد بخش تعریف ماده و همینطور شرایط اولیه مسئله را بررسی بفرمایید
سلام از سایت خوبتون ممنونم
میخوام یه تست خستگی تک محوره از الیاژ منیزیم را در اباکوس مدل کنم.منتها خواص منیزیم نامتقارن است بعبارتی در کشش و فشار رفتار متفاوتی از خود نشون میده.از طرفی نمونه تحت این تست وارد پلاستیسیته میشه.میخواستم بدونم اگر بخوام داده های منحنی هیسترزیس تنش – کرنش را بصورت تعداد مثلا صد نقطه، وارد آباکوس کنم، آیا به سابروتین نویسی نیاز هست؟
باز هم از زحماتتون تشکر میکنم.
سلام
نیازی به وارد کردن نقاط نیست
میتونید آموزش نحوه مدلسازی اثر باوشینگر در آباکوس و آشنایی با انواع سختشوندگی و تعریف آن در آباکوس را مطالعه بفرمایید
با سلام و خسته نباشید حضور شما، هنگام استفاده از سابروتین vumat مقداری مشخص به افزایش کرنش stainInc توسط نرم افزار نسبت داده می شود و تنش با رابطه داده شده آپدیت می شود. نرم افزار آباکوس بر چه اساسی نمو کرنش در سابروتین vumat را در نظر می گیرد؟ بیشتر نمو کرنش در زمان صفر منظورم هست. آیا عدد دلخواهی را به آن نسبت می دهد؟
سلام
به شکل کلی نمو کرنش در تحلیل Explicit کوچکتر از نمو کرنش پایدار لحاظ میشه
نمو کرنش پایدار هم به شکل معمول از مقدار کرنش الاستیک کوچکتره
عدد به شکل fictitious یا ساختگی هست (ولی با رعایت این نکته که معادلات ساختاری را ارضا و از قوانین سرعت انتشار موج در مسائل Explicit پیروی کنه)
با سلام و تشکر از پاسخ شما، من واسه مسأله خودم vumat نوشتم و در رابطه بین تنش و کرنش، نمو کرنش نیز استفاده شده است ولی با این مقدار نمو کرنش تنش تغییر زیادی می کند. سوال من این است که آیا می توانم نمو کرنش را کاهش دهم و چگونه؟
بدون دیدن فرمولبندی و درک صحیح مسئله نظری ندارم
موفق باشید
سلام من مدل ویسکوالاستیک رو تو abaqus explicit می نویسم که شامل یک فنر و یک دمپر به شکل سری هستش. معادله ای هم که براش به دست آوردم به این شکل هستش.
(stressNew =stressOld+(strainInc-dt*stressOld/mu)/(1/e+0.5*dt/mu
مشکلی که دارم اینه که نمو کرنش تقسیم بر مخرج عدد بزرگی میشه. می خواستم ببینم چطور میشه نمو کرنش رو کوچکتر انتجاب کرد.
سؤال و جوابهای همین پست را مطالعه کنید
توضیحاتی به یکی از دوستان دادم که ممکنه مفید باشه براتون
سلام خسته نباشین، تووی آباکوس، اگر بخواهیم برای مدلسازی فاز (interphase) بین نانوفیلر و ماتریس پایه، از مثلا 1000 فنر استفاده کنیم، باید این فنرها رو چگونه مدل کنیم توو آباکوس؟ آیا باید توو قسمت interaction این کارو کرد؟ ممنون میشم ک راهنمایی کنین. باتشکر
سلام
در خصوص مدلسازی فنر در آباکوس میتونید به آموزش مربوطه مراجعه کنید: اینجا
سلام
دو تا سوال داشتم از حضورتون اول اینکه من لینک Intel Fortran رو در اینترنت پیدا نکردم متاسفانه اگر امکانش هست یه لینک در اختیارمون قرار بدید و دوم اینه برای چک کردن سازگاری نسخه های مختلف باید کجا بررسی کنیم.
ممنون
سلام
شما نیاز به Intel Fortran Compiler دارید
کامپایلر روی VS سوار میشه
https://www.3ds.com/support/certified-hardware/simulia-system-information/
با سلام مجدد
خب لینک کامپایلر رو از کجا میشه پیدا کرد!؟
آیا باید PGI Visual Fortran را نصب کنم؟
ورژن های مختلف VS و Abaqus با هم سازگاری دارند؟
فارسی سلیس نوشتم Intel Fortran Compiler
روش سرچ را هم توضیح میدم خدمتتون:
وارد سایت گوگل که شدید (google.com) تایپ بفرمایید: “دانلود Intel Fortran Compiler”
حتی سایتهای داخلی هم لینک دانلود نرمافزار را قرار دادهاند
اون لینکی که گذاشتم برای پیدا کردن ورژنهای مختلف بود؛ مطالعه میکردید متوجه میشدید
با سلام
من ی رابطه ای داخل سابروتین umat دارم ک براساس دستگاه قطبی باید مختصات رو بخونه و مدول رو حساب کنه
چگونه میتونم این کار رو انجام بدم؟ممنون
سلام
کجای umat نیاز به خواندن مختصات دارید؟
من می خوام رابطه زیر را ک براساس شعاع هست حساب کنم برای ماده fgm هست
(E=(Ein-Eout)*(r-rin)/(rout-rin)
این رابطه برای یک استوانه هست
پارامترهای Rin و Rout را خودتون در ابتدای کد وارد کنید یا اینکه در قالب دو Props در نظر بگیرید و در ماژول Property مقداردهی کنید
مشکلم فقط پارامتر r هست ک باید به صورت قطبی خونده بشه از مدلم این رو چیکار باید بکنم
آرایه COORDS مختصات نقاط مدل را در بر داره، میتونید استفاده کنید