Проширења корисничким потпрограмима¶
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 и замените цео еластопластични конститутивни закон корисничком имплементацијом. Такође нису подржане тачке проширења за корисничке граничне услове нити за корисничку обраду при рестарту.
TYPE=USER за !CREEP није подржан. За корисничку имплементацију временски зависног конститутивног закона користите !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 корисничкој имплементацији могу се предати историјски подаци из претходног корака (пластична деформација, повратни напон, величина оштећења итд.) и уписати назад на крају корака. Број променљивих стања одређује се помоћу NSTATUS у !USER_MATERIAL за општи кориснички конститутивни закон, односно повратном вредношћу uElastoPlasticNumStatus за !PLASTIC, YIELD=USER.
Кориснички дефинисано спољно оптерећење¶
Кориснички дефинисано спољно оптерећење је пут за задавање спољне силе корисничким потпрограмом када се она не може представити уграђеним концентрисаним оптерећењем, расподељеним оптерећењем или запреминском силом. Када се у подацима управљања анализом наведе !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