Към съдържанието

Разширения чрез потребителски подпрограми

FrontISTR предоставя набор от потребителски подпрограми за разширяване на функционалността без промяна на основния изходен код. Те обхващат потребителски реализации на конститутивни закони и интегриране на потребителски дефинирани външни натоварвания. Тази глава изброява наличните точки за разширение и ключовите думи в управляващия файл за анализа, с които се извиква всяка от тях. За подробни аргументи на подпрограмите и процедури за повторно компилиране вижте Потребителски подпрограми (ръководство за кодиране).

Общ преглед на функциите

Точките за разширение чрез потребителски подпрограми са разделени на две категории: конститутивни закони на материала и външни натоварвания. От страната на конститутивните закони има четири пътя за извикване — линейна еластичност, хипереластичност, еластопластичност и универсален конститутивен закон — всеки активиран с независима ключова дума. От страната на външните натоварвания е предоставен път, който прочита информация за натоварването от външен файл, подготвен от потребителя, и я добавя към глобалния вектор на натоварването и вектора на остатъка. Всяко разширение става достъпно след редактиране на шаблонния файл, включен в дистрибуцията на FrontISTR, и повторно компилиране на основната програма.

Категория на разширението Ключова дума в управлението на анализа Основни потребителски подпрограми Шаблон за редактиране
Потребителска линейна еластичност !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Потребителска хипереластичност !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Потребителска еластопластичност (функция на провлачване и return mapping) !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 и заменете целия еластопластичен конститутивен закон с потребителска реализация. Не се поддържат потребителски гранични условия и точки за разширение за потребителска обработка при restart.

!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 (която връща броя реални променливи на състоянието, които трябва да се съхраняват) — при инициализация на точка на Gauss. Не се поддържа път, който заменя само кривата на уякчаване с потребителска реализация. Дори когато е необходима само потребителски дефинирана крива на уякчаване, използвайте този път, за да замените целия еластопластичен конститутивен закон с потребителска реализация.

Универсален потребителски конститутивен закон

Универсалният потребителски конститутивен закон е път за реализиране на конститутивни закони, които не се вписват в рамките на еластичност, хипереластичност или еластопластичност. Задайте !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 отново. Потребителските подпрограми не могат да бъдат заменяни в разпространяваните двоични файлове, затова използването на потребителско разширение изисква среда, в която FrontISTR може да бъде компилиран от изходен код.

Шаблоните за потребителски подпрограми се намират под fistr1/src/lib/user/, като за всяка категория разширение има конкретен файл за редактиране (за имената на файловете вижте таблицата в Общ преглед на функциите). В началното си състояние файловете съдържат или празни тела на подпрограми, или примерна линейно-еластична реализация; потребителите добавят там собствен конститутивен закон или дефиниция на натоварване. След редактиране на шаблона компилирайте FrontISTR отново по нормалния начин с CMake и изпълнете анализа с получения изпълним файл fistr1.

Подробности като значението на аргументите на подпрограмите, обработката на масивите с променливи на състоянието и предпазните мерки при повторно компилиране са дадени на съответните страници от ръководството за кодиране.

Вижте също

AI-assisted translation May contain errors Official docs Status