Розширення користувацькими підпрограмами¶
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 (повертає напруження) під час оновлення напружень. Не використовуйте її разом із наявною гіперпружною або пружнопластичною моделлю.
Користувацька гіперпружність¶
Користувацька гіперпружність — це шлях для обчислення напруження та дотичної жорсткості з похідних функції енергії деформації в рамках великих деформацій (повний лагранжевий метод). У керувальних даних аналізу задайте !HYPERELASTIC, TYPE=USER. Викликаються ті самі підпрограми uElasticMatrix і uElasticUpdate, що й для користувацької лінійної пружності, і використовується той самий шаблон fistr1/src/lib/user/uelastic.f90. Оскільки ключове слово перемикає, чи FrontISTR розглядає реалізацію як малу деформацію, чи як повний лагранжевий підхід, один і той самий шаблон не можна одночасно використовувати для реалізацій малих і великих деформацій. Реалізуйте його як один із цих двох конститутивних законів.
Користувацька пружнопластичність¶
Користувацька пружнопластичність — це шлях, у якому користувач реалізує функцію текучості та процедуру повернення. У керувальних даних аналізу задайте !PLASTIC, YIELD=USER. Це переводить обчислення до гілки, незалежної від вбудованих критеріїв текучості Мізеса, Мора—Кулона та Друкера—Прагера. uElastoPlasticMatrix (повертає пружнопластичну дотичну жорсткість \(D\)) викликається під час обчислення жорсткості елемента, uBackwardEuler (відображає пробне напруження на істинне та оновлює змінні стану) — під час оновлення напружень, а uElastoPlasticNumStatus (повертає кількість дійснозначних змінних стану, що зберігаються) — під час ініціалізації точок Гауса. Шлях, що замінює лише криву зміцнення користувацькою реалізацією, не підтримується. Навіть якщо потрібна лише користувацька крива зміцнення, використовуйте цей шлях для заміни всього пружнопластичного конститутивного закону користувацькою реалізацією.
Універсальний користувацький конститутивний закон¶
Універсальний користувацький конститутивний закон — це шлях для реалізації конститутивних законів, що не вкладаються в рамки пружності, гіперпружності або пружнопластичності. У керувальних даних аналізу задайте !USER_MATERIAL. За замовчуванням він обробляється в рамках оновленого лагранжевого методу; якщо задано KIRCHHOFF, використовується повний лагранжевий метод. Кількість змінних стану задається параметром 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. Користувацькі підпрограми не можна замінювати в готових бінарних дистрибутивах, тому для користувацького розширення потрібне середовище, у якому 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