Проширување со кориснички потпрограми¶
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, истиот шаблон не може истовремено да се користи за двете рамки; имплементирајте го како една од нив.
Корисничка еластопластичност¶
Корисничката еластопластичност е патека во која корисникот ги имплементира функцијата на течење и постапката повратно пресликување. Во податоците за контрола на анализата се задава !PLASTIC, YIELD=USER. Ова е независна гранка од вградените функции на течење Mises, Mohr-Coulomb и Drucker-Prager. При пресметка на елементната крутост се повикува uElastoPlasticMatrix (ја враќа еластопластичната тангентна крутост \(D\)), при ажурирање на напрегањето uBackwardEuler (го пресликува пробното напрегање во вистинското и ги ажурира состојбените променливи), а при иницијализација на Gauss точките 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