הרחבה באמצעות תתי־שגרה של המשתמש¶
FrontISTR מספק קבוצה של תתי־שגרה למשתמש המאפשרות להרחיב את הפונקציונליות בלי לשנות את קוד הליבה. ההרחבות הנתמכות הן מימוש חוקי חומר בידי המשתמש ושילוב עומסים חיצוניים המוגדרים בידי המשתמש. פרק זה מציג את נקודות ההרחבה ואת מילות המפתח בקובץ בקרת האנליזה המשמשות להפעלת כל אחת מהן. למפרט המפורט של ארגומנטי תתי־השגרה ולהליך הבנייה מחדש, ראו תתי־שגרה למשתמש (מדריך קידוד).
סקירת הפונקציות¶
נקודות ההרחבה באמצעות תתי־שגרה למשתמש מתחלקות לשתי קבוצות: חוקי חומר ועומסים חיצוניים. בצד חוקי החומר קיימים ארבעה מסלולי קריאה נפרדים: אלסטיות ליניארית, היפראלסטיות, אלסטו־פלסטיות וחוק חומר כללי. בצד העומסים החיצוניים קיים מסלול הקורא מידע על עומס מקובץ חיצוני שהמשתמש מכין ומוסיף אותו לווקטור העומס הגלובלי ולווקטור השיור. בכל המקרים יש לערוך את קובץ התבנית הכלול בהפצת FrontISTR ולאחר מכן לבנות מחדש את התוכנה.
| קטגוריית הרחבה | מילת מפתח בבקרת האנליזה | תתי־שגרה עיקריות למשתמש | תבנית לעריכה |
|---|---|---|---|
| אלסטיות ליניארית של המשתמש | !ELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| היפראלסטיות של המשתמש | !HYPERELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| אלסטו־פלסטיות של המשתמש (פונקציית כניעה ומיפוי חזרה) | !PLASTIC, YIELD=USER | uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus | fistr1/src/lib/user/uyield.f90 |
| חוק חומר כללי של המשתמש | !USER_MATERIAL | uMatlMatrix, uUpdate | fistr1/src/lib/user/umat.f90 |
| עומס חיצוני המוגדר בידי המשתמש | !ULOAD, FILE=<fname> | ureadload, uloading, uResidual | fistr1/src/lib/user/uload.f90 |
אין תמיכה בחוק הקשיה של המשתמש שבו פונקציית הכניעה נשארת מובנית ורק עקומת ההקשיה מוחלפת במימוש משתמש. אם נדרש מימוש משתמש לעקומת ההקשיה, יש לבחור !PLASTIC, YIELD=USER ולהחליף את חוק החומר האלסטו־פלסטי כולו במימוש משתמש. גם נקודות הרחבה לתנאי שפה של המשתמש או לעיבוד משתמש בעת הפעלה מחדש אינן נתמכות.
!CREEP עם TYPE=USER אינו נתמך. למימוש חוק חומר תלוי־זמן בידי המשתמש יש להשתמש ב־!USER_MATERIAL.
חוקי חומר של המשתמש¶
חוק חומר של המשתמש הוא ממשק למימוש קשר מאמץ־עיבור שאינו ניתן לביטוי באמצעות מודלי החומר המובנים. בהתאם למסגרת של חוק החומר, קיימים ארבעה מסלולים: אלסטיות ליניארית של המשתמש, היפראלסטיות של המשתמש, אלסטו־פלסטיות של המשתמש וחוק חומר כללי של המשתמש. בכל מסלול, בתוך בלוק !MATERIAL, מוסיפים TYPE=USER או YIELD=USER למילת המפתח המתאימה בנתוני בקרת האנליזה. ניתן לציין עד 100 קבועי משתמש והם מועברים לתת־השגרה.
אלסטיות ליניארית של המשתמש¶
אלסטיות ליניארית של המשתמש היא המסלול שבו המשתמש מחשב את מטריצת האלסטיות במסגרת של עיוותים קטנים. כאשר מציינים !ELASTIC, TYPE=USER, FrontISTR מטפל בה כחוק חומר לעיוותים קטנים וקורא ל־uElasticMatrix (המחזירה את מטריצת האלסטיות \(D\)) ול־uElasticUpdate (המחזירה את המאמץ) בעת חישוב קשיחות האלמנט ועדכון המאמצים. אין לשלב מסלול זה עם מודלים קיימים של היפראלסטיות או אלסטו־פלסטיות.
היפראלסטיות של המשתמש¶
היפראלסטיות של המשתמש היא מסלול לחישוב המאמץ והקשיחות המשיקית מנגזרות פונקציית אנרגיית העיבור במסגרת עיוותים גדולים (Total Lagrange). בנתוני בקרת האנליזה מציינים !HYPERELASTIC, TYPE=USER. תתי־השגרה הנקראות הן אותן uElasticMatrix ו־uElasticUpdate המשמשות לאלסטיות הליניארית של המשתמש, וגם התבנית fistr1/src/lib/user/uelastic.f90 משותפת. מאחר שהציון במילת המפתח קובע אם FrontISTR יטפל בחוק כעיוות קטן או כ־Total Lagrange, אין להשתמש באותו מימוש תבנית בו־זמנית לשתי המסגרות; יש לממש אותו כחוק חומר אחד מהשניים.
אלסטו־פלסטיות של המשתמש¶
אלסטו־פלסטיות של המשתמש היא המסלול שבו המשתמש מממש את פונקציית הכניעה ואת הליך מיפוי החזרה (return-mapping). בנתוני בקרת האנליזה מציינים !PLASTIC, YIELD=USER. מסלול זה נפרד מפונקציות הכניעה המובנות Mises, Mohr-Coulomb ו־Drucker-Prager. בעת חישוב קשיחות האלמנט נקראת uElastoPlasticMatrix (המחזירה את הקשיחות המשיקית האלסטו־פלסטית \(D\)), בעת עדכון המאמץ נקראת uBackwardEuler (הממפה את מאמץ הניסיון למאמץ האמיתי ומעדכנת משתני מצב), ובעת אתחול נקודות גאוס נקראת uElastoPlasticNumStatus (המחזירה את מספר משתני המצב הממשיים שיש לשמור). אין מסלול להחלפה של עקומת ההקשיה בלבד; גם אם נדרש רק חוק הקשיה של המשתמש, יש לממש במסלול זה את חוק החומר האלסטו־פלסטי כולו.
חוק חומר כללי של המשתמש¶
חוק חומר כללי של המשתמש הוא מסלול למימוש מרוכז של חוק חומר שאינו מתאים למסגרת אלסטית, היפראלסטית או אלסטו־פלסטית. בנתוני בקרת האנליזה מציינים !USER_MATERIAL. כברירת מחדל הוא מטופל במסגרת Updated Lagrange, וכאשר מצוין KIRCHHOFF הוא מטופל במסגרת Total Lagrange. מספר משתני המצב מצוין באמצעות NSTATUS. בעת חישוב קשיחות האלמנט נקראת uMatlMatrix (המחזירה את הקשיחות המשיקית \(D\)), ובעת עדכון המאמץ נקראת uUpdate (המעדכנת את המאמץ ואת משתני המצב).
העברת קבועי משתמש ומשתני מצב¶
בכל המסלולים !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER ו־!USER_MATERIAL, קבועי המשתמש הרשומים בשורות הנתונים של בקרת האנליזה (עד 100) מועברים כפי שהם בארגומנט matl של תת־השגרה. ב־!PLASTIC, YIELD=USER, יחד עם הקבועים האלסטיים שצוינו ב־!ELASTIC, מועברים קבועי המשתמש הניתנים דרך שורות הנתונים של !PLASTIC.
בחוק החומר הכללי של המשתמש וב־!PLASTIC, YIELD=USER, אפשר להעביר למימוש המשתמש מידע היסטורי מהצעד הקודם, כגון עיבור פלסטי, מאמץ גב או גודל נזק, דרך משתני המצב fstat, ולעדכן אותם בסיום הצעד. מספר משתני המצב נקבע באמצעות !USER_MATERIAL והפרמטר NSTATUS בחוק החומר הכללי, וב־!PLASTIC, YIELD=USER באמצעות הערך המוחזר מ־uElastoPlasticNumStatus.
עומס חיצוני המוגדר בידי המשתמש¶
עומס חיצוני המוגדר בידי המשתמש הוא מסלול להגדרת כוח חיצוני שאינו ניתן לביטוי באמצעות עומס מרוכז, עומס מבוזר או כוח נפחי מובנים. כאשר כותבים !ULOAD, FILE=<fname> בנתוני בקרת האנליזה, FrontISTR מעביר את שם הקובץ שצוין אל ureadload, והמימוש של המשתמש קורא ממנו מידע ושומר אותו כנתוני מודול.
להפעלת !ULOAD מתאימות שלוש תתי־השגרה הבאות.
ureadload: בתחילת האנליזה קוראת עומס שהוגדר בידי המשתמש מן הקובץ החיצוני המצוין בקובץ הבקרה. מימוש המשתמש פותח את הקובץ ושומר את הנתונים הדרושים במשתני המודול.uloading: נקראת בעת הרכבת וקטור העומס החיצוני בכל צעד ומוסיפה את עומס המשתמש לווקטור העומס הגלובלי. מספר הצעד הנוכחי ומקדם העומס מועברים כארגומנטים.uResidual: נקראת בעת הרכבת וקטור השיור בכל איטרציה ומוסיפה את תרומת עומס המשתמש לווקטור השיור הגלובלי. היא נקראת הן מאיטרציות לא־ליניאריות והן מחישובי שיווי משקל.
לא קיימת נקודת הרחבה לתנאי שפה של המשתמש, כגון הרחבת הזזה מוכתבת או תנאי מגע. כאשר נדרשת הרחבת משתמש שאינה כוח חיצוני, יש להשתמש במילת המפתח המובנית המתאימה או במסלול חוק חומר של המשתמש.
הליך מימוש תתי־שגרה של המשתמש¶
כדי להשתמש בתתי־שגרה של המשתמש, יש לערוך את קובץ התבנית הכלול בהפצת קוד המקור של FrontISTR ולאחר מכן לבנות מחדש את FrontISTR. לא ניתן להחליף תתי־שגרה של המשתמש בבינארי המופץ, ולכן שימוש בהרחבות משתמש מחייב סביבת בנייה מקוד המקור.
תבניות תתי־השגרה נמצאות תחת fistr1/src/lib/user/, וקובץ היעד לעריכה נקבע לפי קטגוריית ההרחבה (ראו את הטבלה ב־סקירת הפונקציות). במצב ההתחלתי גוף תת־השגרה בכל קובץ ריק או מכיל מימוש לדוגמה של אלסטיות ליניארית. המשתמש מוסיף שם את חוק החומר או הגדרת העומס שלו. לאחר עריכת התבנית, בונים מחדש את FrontISTR בדרך הרגילה באמצעות CMake ומריצים את האנליזה עם קובץ ההפעלה fistr1 שנוצר.
פרטים על משמעות ארגומנטי תתי־השגרה, טיפול במערכי משתני מצב ונקודות שיש לשים לב אליהן בעת הבנייה מחדש מחולקים בין דפי מדריך הקידוד הבאים.
- תתי־שגרה למשתמש (סקירה)
- חוק חומר כללי של המשתמש
umat.f - אלסטו־פלסטיות של המשתמש
uyield.f - עומס חיצוני המוגדר בידי המשתמש
uload.f - אלסטיות ליניארית והיפראלסטיות של המשתמש
uelastic.f
נושאים קשורים¶
- נתוני חומר — אפשרויות בחירת חוקי חומר ורשימת המודלים המובנים
- תנאי שפה ועומסים — תנאי השפה והעומסים המובנים
- תתי־שגרה למשתמש (מדריך קידוד) — מפרט ארגומנטי תתי־השגרה וכללי המימוש
- !USER_MATERIAL — פורמט מילת המפתח לחוק חומר כללי של המשתמש
- !ELASTIC — מילת המפתח לאלסטיות ליניארית, כולל
TYPE=USER - !HYPERELASTIC — מילת המפתח להיפראלסטיות, כולל
TYPE=USER - !PLASTIC — מילת המפתח לאלסטו־פלסטיות, כולל
YIELD=USER