انواع رابط عملکرد مواد داخلی

انواع رابط عملکرد مواد داخلی

انواع رابط عملکرد مواد داخلی
در حال حاضر شش نوع واسط عملکرد مواد خارجی داخلی مختلف یا سوکت ها وجود دارد که ویژگی های مشترک زیادی دارند:
رابطه استرس – کرنش عمومی
رابطه استرس- تغییر شکل عمومی
کرنش باقیمانده غیر ارتجاعی
تغییر شکل باقیمانده غیر الاستیک
رابطه عمومی B(H).
استدلال های عمومی برای توابع مواد داخلی
این رابط‌های تابع متریال داخلی انتظار دارند که کتابخانه خارجی حداقل دارای یک تابع ارزیابی به نام eval باشد ، با امضای الگوی زیر:
int eval(…، // آرگومان های خاص نوع رابط
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
کاربر باید آرایه ای از پارامترهای مدل مواد را مشخص کند که par نامیده می شود . تعداد پارامترهای nPar به طور ضمنی به عنوان طول آرایه ویژگی مواد مشخص می شود، که باید به عنوان یک ویژگی در یک گروه ویژگی تحت ویژگی فراخوانی External Material تعریف شود یا در جدول Material Contents در تنظیمات گره External Material تنظیم شود. فهرست بیان ویژگی های ماده که در این روش مشخص شده است به عنوان لیستی از عبارات مدل تفسیر می شود که در نقاطی که خروجی های مواد خارجی برای آنها درخواست شده است ارزیابی می شود.
کاربر همچنین می‌تواند فهرستی از آرایه‌های حالت تعریف شده در هر نقطه ادغام و همچنین طول هر آرایه را مشخص کند. طول و مقادیر آرایه در جفت آرگومان های متوالی به تابع خارجی ارسال می شود که در اینجا به طور رسمی nStates1 , states1 , nStates2 , states2 و غیره نامیده می شوند. توجه داشته باشید که آرایه‌های حالت هم ورودی و هم خروجی هستند: وقتی تابع فراخوانی می‌شود، آن‌ها حاوی مقادیر همگرای مرحله قبلی حالت‌ها هستند. در بازگشت، اگر حل کننده تصمیم گرفت به مرحله بعدی ادامه دهد، باید مقادیر حالت ذخیره شوند.
آرگومان اختیاری errMsg امکان بازگرداندن یک پیام خطای دقیق را در صورتی که ارزیابی باید به طور غیرعادی خاتمه داده شود، یا ارسال یک پیام هشدار یا گزارش برای نمایش در گزارش حل کننده امکان پذیر است. این یک رشته از پیش تخصیص یافته با اندازه مشخص است.
گروه ویژگی که آرایه par را ذخیره می‌کند، ممکن است آرایه دیگری از آرگومان‌های رشته کتابخانه تابع اضافی ، arg را نیز مشخص کند ، که بدون ارزیابی به‌عنوان آرگومان‌های رشته‌ای جداگانه به تابع ماده خارجی ارسال می‌شوند. توجه داشته باشید که تعداد آرگومان های رشته ای که به این روش ارسال می شوند بررسی نشده است.
اولیه سازی و پاکسازی
علاوه بر تابع eval ، کتابخانه خارجی ممکن است دارای توابعی به نام init و cleanup باشد. تابع مقداردهی اولیه دارای امضای زیر است:
int init(int *nPar, // تعداد پارامترهای مدل مواد
         int *nStateArgs، // تعداد بردارهای حالت تعریف شده توسط کاربر
         int *stateArgsSize، // اندازه های بردار حالت تعریف شده توسط کاربر
         int *errMsgSize، // اندازه آرگومان خروجی پیام خطا
         int *nStringArgs، // تعداد آرگومان های آرایه رشته ای
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
پنج آرگومان اول همیشه پاس می شوند. بسته به تنظیمات گره External Material که از آن کتابخانه خارجی فراخوانی می شود ، باقیمانده ممکن است وجود داشته باشد یا نباشد . اگر errMsg وجود نداشته باشد، آرگومان errMsgSize منفی خواهد بود. تعداد آرگومان های char* اضافی در انتهای لیست آرگومان توسط آرگومان nStringArgs داده می شود.
تابع مقداردهی اولیه هر بار که یک نمایش بومی جدید از مسئله Multiphysic ایجاد می شود فراخوانی می شود. در یک دنباله حل کننده، این نقطه با گره کامپایل Equations مطابقت دارد. اما نمایش‌های بومی ممکن است در زمان‌های دیگر نیز ایجاد شوند، برای مثال هنگام نشان دادن یک حل‌کننده پیش‌فرض. شما می توانید متکی باشید که متد init حداقل یک بار قبل از شروع حل کننده فراخوانی شده است، اما ممکن است چندین بار فراخوانی شود.
 
آرگومان های ارسال شده به متد init نحوه فراخوانی تابع eval را توضیح می دهند. پیاده‌سازی روش init برای بررسی اینکه اعداد و اندازه‌های آرگومان با پیاده‌سازی در تابع eval مطابقت دارند، عمل خوبی است و می‌تواند از خاتمه غیرمنتظره برنامه ناشی از خواندن خارج از آرگومان‌های ارسال شده جلوگیری کند.
تابع پاکسازی زمانی فراخوانی می شود که نمایش بومی حذف شود. این معمولاً زمانی اتفاق می‌افتد که یک شی راه‌حل بازنویسی شود یا به‌طور دیگری دور انداخته شود، حداکثر در هنگام خروج از برنامه. تابع دارای امضای زیر است:
int cleanup(char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
            char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
آرگومان های ارسال شده مشابه آخرین آرگومان های تابع init با اندازه و مقادیر یکسان هستند.
 
توجه داشته باشید که اگر تابع init با خطا خاتمه یابد ، بلافاصله تابع پاکسازی فراخوانی می شود . بنابراین باید به گونه ای نوشته شود که در برابر استدلال های گمشده مدارا کند.
مدیریت خطا، هشدارها، و پیام های گزارش
توابع باید مقادیر عدد صحیح را برگردانند. برای تابع eval مقادیر برگشتی زیر تعریف شده است:
جدول 9-27: مقادیر بازگشتی پذیرفته شده برای تابع EVAL
ارزش بازگشتی
معنی
0
خروجی عادی
1
خطا: “تعداد پارامترها اشتباه است”
2
خطا: «تعداد وضعیت‌ها اشتباه است»
-1
خروج عادی، اما اخطار نمایش داده می شود
-2
خروج عادی، اما در صورت وجود آرگومان errMsg ، پیام گزارش را نمایش دهید
چیز دیگری مد نظر دارید
خطای نامشخص
برای تابع init ، مقادیر بازگشتی زیر تعریف شده است:
جدول 9-28: مقادیر بازگشتی پذیرفته شده برای تابع INIT
ارزش بازگشتی
معنی
0
خروجی عادی
1
خطا: “تعداد پارامترها اشتباه است”
2
خطا: «تعداد وضعیت‌ها اشتباه است»
3
خطا: «تعداد آرگومان اشتباه است»
4
خطا: «فضای ذخیره پیام خطا کافی نیست»
-1
خروج عادی، اما اخطار نمایش داده می شود
-2
خروج عادی، اما در صورت وجود آرگومان errMsg ، پیام گزارش را نمایش دهید
چیز دیگری مد نظر دارید
خطای نامشخص
برای تابع پاکسازی ، هر مقدار برگشتی غیر صفر به عنوان “خطای پاکسازی مواد خارجی” گزارش می شود.
هنگامی که مقدار بازگشتی سیگنال خطا می دهد، همچنین می توان یک رشته جزئیات خطا را در آرگومان خروجی اختیاری، errMsg ارائه کرد. آرگومان پیام خطا، در صورت وجود، یک رشته از پیش تخصیص یافته با اندازه مشخص است.
همچنین می توانید از آرگومان errMsg برای بازگرداندن یک هشدار یا یک پیام گزارش استفاده کنید. اگر مقدار بازگشتی -1 باشد ، محتویات errMsg به عنوان یک هشدار در گزارش حل کننده و در گره هشدارها در زیر گره حل کننده نمایش داده می شود. هنگامی که مقدار بازگشتی -2 است ، پیام فقط در گزارش نمایش داده می شود.
 
پیام های هشدار مکرر فقط یک بار نمایش داده می شود. اگر می‌خواهید هر بار که تابع eval -1 را برمی‌گرداند همان اخطار نمایش داده شود ، باید رشته‌های errMsg را منحصر به فرد کنید، برای مثال با شماره‌گذاری هشدارها.
رابطه استرس – کرنش عمومی
سوکت رابطه تنش-کرنش عمومی یک رابطه تنش-کرنش را با محاسبه تانسور تنش دوم Piola-Kirchhoff با توجه به کرنش سبز-لاگرانژ فعلی همراه با یک بردار ویژگی ماده و یک بردار حالت های ذخیره شده پیاده سازی می کند. امضای تابع ماده خارجی مورد انتظار عبارت است از:
int eval(double *el, // گرین-لاگرانژ کرنش، ورودی
         دو برابر *Sl، // تنش دوم Piola-Kirchhoff، خروجی
         دو برابر *Jac، // ژاکوبین تنش با توجه به کرنش، خروجی
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
تانسورهای e و s به ترتیب Voigt داده شده اند. یعنی اجزای موجود در e عبارتند از xx yy zz yz xz xy } و به طور مشابه برای s . Jacobian Jac یک ماتریس 6 در 6 از مشتقات جزئی اجزای s (ردیف) با توجه به اجزای e (ستون) است. ماتریس به ترتیب ردیف اصلی ذخیره می شود. همه اجزا به سیستم مختصات مواد محلی اشاره دارد. توجه داشته باشید که Jacبه طور کلی غیر متقارن است زیرا سه جزء آخر e به جای برش مهندسی، مؤلفه های تانسور کرنش را نشان می دهند ( γ ij  =  ij ). برای توضیح آرگومان های باقی مانده، به آرگومان های عمومی برای توابع مواد داخلی مراجعه کنید.
رابطه استرس- تغییر شکل عمومی
سوکت رابطه تنش-تغییر شکل عمومی یک رابطه تنش-تغییر شکل را با محاسبه تانسور تنش دوم Piola-Kirchhoff با توجه به گرادیان تغییر شکل فعلی و قبلی، دمای محلی فعلی و قبلی، سیستم مختصات ماده محلی، یک بردار ویژگی ماده، به علاوه استاندارد اختیاری پیاده‌سازی می‌کند. استدلال ها امضای تابع ماده خارجی مورد انتظار عبارت است از:
int eval(double *FlOld، // گرادیان تغییر شکل در مرحله قبل، ورودی
         دو برابر *Fl، // گرادیان تغییر شکل در مرحله فعلی، ورودی
         double *tempOld، // دما در مرحله قبل، ورودی
         double *temp، // دما در مرحله فعلی، ورودی
         double *sysT، // سیستم مختصات مواد محلی، ورودی
         double *delta، // گام زمانی / افزایش پارامتر ادامه
         دو برابر *Sl، // تنش دوم Piola-Kirchhoff، خروجی
         دوگانه *Jac، // Jacobian تنش با توجه به تغییر شکل
                                // گرادیان، خروجی
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
تانسورهای FlOld و Fl به صورت ماتریس های 3 در 3 به ترتیب ردیف اصلی گسترش یافته اند، که در آن شاخص ردیف به جهت های جهانی (جابجایی) اشاره دارد و شاخص ستون به جهت ها در سیستم مختصات ماده محلی اشاره دارد. خود سیستم مختصات، sysT ، به عنوان یک الحاق 1 به 9 از سه بردار پایه کوواریانت سیستم محلی که در مختصات ماده جهانی بیان شده اند، منتقل می شود. آرگومان دلتا یک اسکالر است که برای استفاده در آینده رزرو شده است.
تانسور تنش خروجی، Sl ، به ترتیب Voigt داده شده است. یعنی مولفه های Sl عبارتند از Sl xx Sl yy Sl zz Sl yz Sl xz Sl xy } که در آن شاخص ها به سیستم مختصات ماده محلی اشاره دارد. Jacobian Jac یک ماتریس 6 در 9 از مشتقات جزئی اجزای Sl (ردیف) با توجه به اجزای Fl (ستون) است. ماتریس به ترتیب ردیف اصلی ذخیره می شود. برای توضیح استدلال های باقی مانده، رجوع کنید بهاستدلال های عمومی برای توابع مواد داخلی .
کرنش باقیمانده غیر ارتجاعی
سوکت کرنش باقیمانده غیرالاستیک یک روش به روز رسانی را برای کمک غیرکشسانی افزودنی به کل کرنش سبز-لاگرانژ اجرا می کند. تنش و کرنش کل در مرحله همگرا قبلی، کرنش کل فعلی، دمای فعلی، دمای مرجع، بردار ویژگی ماده و بردار حالت های ذخیره شده به عنوان ورودی ارسال می شوند.
int eval(double *sold, // استرس دوم Piola-Kirchhoff در مرحله قبل، ورودی
         double *eOld، // کرنش سبز-لاگرانژ در مرحله قبل، ورودی
         دو برابر *e، // کرنش سبز-لاگرانژ در مرحله فعلی، ورودی
         دو برابر *T، // دما، ورودی
         دو برابر *Tref، // دمای مرجع کرنش، ورودی
         double *eInel، // وضعیت کرنش سبز-لاگرانژ غیرکشسان، ورودی/خروجی
         double *Jac, // Jacobian of inelastic strain, output
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
تانسورهای sOld ، eOld ، e و eInel به ترتیب Voigt داده می‌شوند (یعنی اجزای موجود در xx yy zz yz xz xy } هستند) و به‌طور مشابه برای سایر تانسورها . Jacobian Jac یک ماتریس 6 در 6 از مشتقات جزئی اجزای eInel (ردیف‌ها) با توجه به اجزای e (ستون‌ها) است. ماتریس به ترتیب ردیف اصلی ذخیره می شود. توجه داشته باشید که مقدار خروجی اولیهeInel به عنوان حالت اعلان می شود، به این معنی که آرگومان ورودی حاوی مقادیر گام قبلی همگرا است. آرگومان‌های دما T و Tref ورودی‌های مدل استاندارد هستند که در ویژگی فیزیک برای فراخوانی مواد خارجی که سوکت کرنش باقی‌مانده Inelastic انتخاب شده است، مشخص شده‌اند. برای توضیح آرگومان های باقی مانده، به آرگومان های عمومی برای توابع مواد داخلی مراجعه کنید.
تغییر شکل باقیمانده غیر الاستیک
سوکت تغییر شکل باقیمانده غیرالاستیک یک روش به روز رسانی را برای کمک غیرالاستیک به گرادیان تغییر شکل اجرا می کند. تنش و تغییر شکل کل در مرحله همگرای قبلی، تغییر شکل کل فعلی، دمای فعلی، دمای مرجع، به علاوه آرگومان های اختیاری استاندارد به عنوان ورودی ارسال می شوند.
int eval(double *sold, // استرس دوم Piola-Kirchhoff در مرحله قبل، ورودی
         double *FlOld، // گرادیان تغییر شکل در مرحله قبل، ورودی
         دو برابر *Fl، // گرادیان تغییر شکل در مرحله فعلی، ورودی
         دو برابر *T، // دما، ورودی
         دو برابر *Tref، // دمای مرجع کرنش، ورودی
         دوگانه *FlInel، // وضعیت کرنش سبز-لاگرانژ غیرکشسان، ورودی/خروجی
         double *Jac, // Jacobian of inelastic strain, output
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
تانسور sOld به ترتیب Voigt داده می‌شود (یعنی مولفه‌های موجود در s xx ، yy ، zz ، yz ، xz ، xy هستند) . آرگومان های گرادیان تغییر شکل FlOld ، Fl و FlInel به صورت ماتریس های 3 در 3 که به ترتیب ردیف اصلی گسترش یافته اند، منتقل می شوند، جایی که شاخص ردیف به جهت های جهانی (جابجایی) اشاره می کند و شاخص ستون به جهت ها در مختصات ماده محلی اشاره می کند. سیستم. جک ژاکوبینیک ماتریس 9 در 9 از مشتقات جزئی اجزای FlInel (ردیف) با توجه به اجزای Fl (ستون) است. ماتریس به ترتیب ردیف اصلی ذخیره می شود. توجه داشته باشید که مقدار خروجی اولیه FlInel به عنوان حالت اعلام می شود، به این معنی که آرگومان ورودی حاوی مقادیر مرحله همگرای قبلی است. آرگومان‌های دما T و Tref ورودی‌های مدل استاندارد هستند که در ویژگی فیزیک برای فراخوانی مواد خارجی که سوکت کرنش باقی‌مانده Inelastic انتخاب شده است، مشخص شده‌اند. برای توضیح آرگومان های باقی مانده، به آرگومان های عمومی برای توابع مواد داخلی مراجعه کنید.
رابطه عمومی B(H).
سوکت رابطه عمومی B(H) تعمیم یک منحنی BH را پیاده سازی می کند. با توجه به میدان مغناطیسی و چگالی شار مغناطیسی در مرحله همگرای قبلی، چگالی شار مغناطیسی به روز شده مربوط به میدان مغناطیسی به روز شده را محاسبه می کند. یک بردار ویژگی ماده و یک بردار حالت های ذخیره شده به عنوان ورودی اضافی ارسال می شود. پیاده سازی های معمولی از حالت های اضافی برای مدل سازی پسماند استفاده می کنند.
int eval(double *oldH، // میدان مغناطیسی در مرحله قبل، ورودی
         دو برابر *H، // میدان مغناطیسی، ورودی
         دو برابر *B، // حالت چگالی شار مغناطیسی، ورودی/خروجی
         double *Jac، // Jacobian از B با توجه به H، خروجی
         int *nPar، // تعداد پارامترهای مدل مواد، ورودی
         double *par، // پارامترهای مدل مواد، ورودی
         int *nStates1، // اندازه آرایه حالت اول، ورودی، اختیاری
         double *states1، // آرایه حالت اول، ورودی/خروجی، اختیاری
         int *nStates2، // اندازه آرایه حالت دوم، ورودی، اختیاری است
         double *states2, … // آرایه حالت دوم، ورودی/خروجی، اختیاری
         char *errMsg، // آرگومان پیام خطا، خروجی، اختیاری
         char *arg1، char *arg2، …) // آرگومان های رشته اضافی، اختیاری
میدان‌های مغناطیسی oldH و H و چگالی شار مغناطیسی به‌صورت آرایه‌هایی با طول 3 ارسال می‌شوند . ماتریس به ترتیب ردیف اصلی ذخیره می شود. توجه داشته باشید که مقدار اولیه خروجی B به عنوان حالت اعلام می شود، به این معنی که آرگومان در هنگام ورود حاوی مقادیر مرحله همگرای قبلی است. برای توضیح آرگومان های باقی مانده، به آرگومان های عمومی برای توابع مواد داخلی مراجعه کنید.
 
برای مثال هایی که نحوه پیاده سازی و استفاده از مواد خارجی را نشان می دهد، نگاه کنید
https://www.comsol.com/model/external-material-examples-structural-mechanics-32331
https://www.comsol.com/model/external-materials-general-hb-bh-relation-32321