Preskočiť na obsah

Rozšírenia používateľskými podprogramami

FrontISTR poskytuje súbor používateľských podprogramov na rozšírenie funkčnosti bez úpravy hlavného zdrojového kódu. Zahŕňajú používateľské implementácie konštitutívnych zákonov a integráciu používateľom definovaných vonkajších zaťažení. Táto kapitola uvádza dostupné body rozšírenia a kľúčové slová v riadiacom súbore analýzy používané na ich vyvolanie. Podrobné argumenty podprogramov a postupy opätovného zostavenia nájdete v Používateľských podprogramoch (príručka pre vývojárov).

Prehľad funkcií

Body rozšírenia používateľskými podprogramami sa delia na dve kategórie: materiálové konštitutívne zákony a vonkajšie zaťaženia. Na strane konštitutívnych zákonov existujú štyri cesty volania — lineárna elasticita, hyperelasticita, elastoplasticita a všeobecný konštitutívny zákon — pričom každá sa aktivuje samostatným kľúčovým slovom. Na strane vonkajšieho zaťaženia je k dispozícii cesta, ktorá načíta informácie o zaťažení z externého súboru pripraveného používateľom a pridá ich do globálneho vektora zaťaženia a vektora rezídua. Každé rozšírenie je dostupné po úprave šablónového súboru zahrnutého v distribúcii FrontISTR a opätovnom zostavení hlavného programu.

Kategória rozšírenia Kľúčové slovo riadenia analýzy Hlavné používateľské podprogramy Šablóna na úpravu
Používateľská lineárna elasticita !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Používateľská hyperelasticita !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Používateľská elastoplasticita (funkcia klzu a návratové mapovanie) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Všeobecný používateľský konštitutívny zákon !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Používateľom definované vonkajšie zaťaženie !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Používateľom definované zákony spevnenia (cesta, ktorá zachová vstavanú funkciu klzu a používateľskou implementáciou nahradí iba krivku spevnenia) nie sú podporované. Ak je potrebná používateľom definovaná krivka spevnenia, zvoľte !PLASTIC, YIELD=USER a nahraďte celý elastoplastický konštitutívny zákon používateľskou implementáciou. Používateľské okrajové podmienky ani body rozšírenia pre používateľské spracovanie počas reštartu nie sú podporované.

!CREEP s TYPE=USER nie je podporované. Na implementáciu časovo závislého konštitutívneho zákona ako používateľského rozšírenia použite !USER_MATERIAL.

Používateľské konštitutívne zákony

Používateľské konštitutívne zákony poskytujú vstupný bod na implementáciu vzťahov napätie-deformácia, ktoré nemožno reprezentovať vstavanými materiálovými modelmi, v externom podprograme. Podľa rámca príslušného vstavaného konštitutívneho zákona sú dostupné štyri cesty: používateľská lineárna elasticita, používateľská hyperelasticita, používateľská elastoplasticita a všeobecný používateľský konštitutívny zákon. V každej ceste zadajte v bloku !MATERIAL riadiacich dát analýzy na príslušnom kľúčovom slove TYPE=USER alebo YIELD=USER. Možno zadať až 100 používateľských konštánt, ktoré sa odovzdajú podprogramu.

Používateľská lineárna elasticita

Používateľská lineárna elasticita je cesta, v ktorej používateľ počíta elastickú maticu v rámci infinitézimálnych deformácií. Keď je v riadiacich dátach analýzy zadané !ELASTIC, TYPE=USER, FrontISTR ju spracúva ako konštitutívny zákon infinitézimálnych deformácií a pri výpočte tuhosti prvku volá uElasticMatrix (vracia elastickú maticu \(D\)) a pri aktualizácii napätia uElasticUpdate (vracia napätie). Nepoužívajte ju spolu s existujúcim hyperelastickým alebo elastoplastickým modelom.

Používateľská hyperelasticita

Používateľská hyperelasticita je cesta na výpočet napätia a dotykovej tuhosti z derivácií funkcie deformačnej energie v rámci veľkých deformácií (úplná Lagrangeova formulácia). V riadiacich dátach analýzy zadajte !HYPERELASTIC, TYPE=USER. Volané podprogramy sú rovnaké uElasticMatrix a uElasticUpdate ako pri používateľskej lineárnej elasticite a zdieľa sa rovnaká šablóna fistr1/src/lib/user/uelastic.f90. Keďže špecifikácia kľúčového slova prepína, či FrontISTR spracúva implementáciu ako infinitézimálnu deformáciu alebo úplnú Lagrangeovu formuláciu, tú istú šablónu nemožno súčasne použiť pre implementáciu malých aj veľkých deformácií. Implementujte ju ako jeden z týchto dvoch konštitutívnych zákonov.

Používateľská elastoplasticita

Používateľská elastoplasticita je cesta, v ktorej používateľ implementuje funkciu klzu a postup návratového mapovania. V riadiacich dátach analýzy zadajte !PLASTIC, YIELD=USER. Tým sa vstúpi do vetvy nezávislej od vstavaných Misesovej, Mohrovej-Coulombovej a Druckerovej-Pragerovej funkcie klzu. Pri výpočte tuhosti prvku sa volá uElastoPlasticMatrix (vracia elastoplastickú dotykovú tuhosť \(D\)), pri aktualizácii napätia uBackwardEuler (mapuje skúšobné napätie na skutočné napätie a aktualizuje stavové premenné) a pri inicializácii Gaussovho bodu uElastoPlasticNumStatus (vracia počet stavových premenných s reálnou hodnotou, ktoré sa majú uchovať). Cesta, ktorá používateľskou implementáciou nahrádza iba krivku spevnenia, nie je podporovaná. Aj keď je potrebná iba používateľom definovaná krivka spevnenia, použite túto cestu a nahraďte celý elastoplastický konštitutívny zákon používateľskou implementáciou.

Všeobecný používateľský konštitutívny zákon

Všeobecný používateľský konštitutívny zákon je cesta na implementáciu konštitutívnych zákonov, ktoré nezapadajú do rámca elasticity, hyperelasticity ani elastoplasticity. V riadiacich dátach analýzy zadajte !USER_MATERIAL. Predvolene sa spracúva v rámci aktualizovanej Lagrangeovej formulácie; ak je zadané KIRCHHOFF, spracúva sa ako úplná Lagrangeova formulácia. Počet stavových premenných určuje NSTATUS. Pri výpočte tuhosti prvku sa volá uMatlMatrix (vracia dotykovú tuhosť \(D\)) a pri aktualizácii napätia uUpdate (aktualizuje napätie a stavové premenné).

Odovzdávanie používateľských konštánt a stavových premenných

Pre každú z ciest !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER a !USER_MATERIAL sa používateľské konštanty zapísané na dátových riadkoch riadiacich dát analýzy (najviac 100) odovzdávajú priamo podprogramu prostredníctvom argumentu matl. Pre !PLASTIC, YIELD=USER sa odovzdávajú elastické konštanty zadané pomocou !ELASTIC a používateľské konštanty zadané dátovými riadkami !PLASTIC.

Pri všeobecnom používateľskom konštitutívnom zákone a !PLASTIC, YIELD=USER možno historické informácie z predchádzajúceho kroku (napríklad plastickú deformáciu, spätné napätie a poškodenie) odovzdať používateľskej implementácii cez stavovú premennú fstat a na konci kroku ich zapísať späť. Počet stavových premenných je pri všeobecnom používateľskom konštitutívnom zákone určený pomocou !USER_MATERIAL a jeho NSTATUS a pri !PLASTIC, YIELD=USER návratovou hodnotou uElastoPlasticNumStatus.

Používateľom definované vonkajšie zaťaženia

Používateľom definované vonkajšie zaťaženia poskytujú cestu na definovanie vonkajších síl, ktoré nemožno reprezentovať vstavanými sústredenými zaťaženiami, rozloženými zaťaženiami alebo objemovými silami. Keď je v riadiacich dátach analýzy uvedené !ULOAD, FILE=<fname>, FrontISTR odovzdá zadaný názov súboru do ureadload a informácie načítané používateľskou implementáciou sa uchovajú ako dáta modulu.

Volaniu !ULOAD zodpovedajú nasledujúce tri podprogramy.

  • ureadload: Na začiatku analýzy načíta používateľom definované zaťaženia z externého súboru zadaného v riadiacom súbore. Používateľská implementácia otvorí súbor a uloží potrebné dáta do premenných modulu.
  • uloading: Volá sa pri zostavovaní vektora vonkajšieho zaťaženia pre každý krok a pridáva používateľské zaťaženie do globálneho vektora zaťaženia. Aktuálne číslo kroku a faktor zaťaženia sa odovzdávajú ako argumenty.
  • uResidual: Volá sa pri zostavovaní vektora rezídua v každej iterácii a pridáva príspevok používateľského zaťaženia do globálneho vektora rezídua. Volá sa z nelineárnych iterácií aj z výpočtov rovnováhy.

Pre používateľské okrajové podmienky (používateľské rozšírenia predpísaného posunutia alebo kontaktných podmienok) nie je k dispozícii žiadny bod rozšírenia. Ak je potrebné používateľské rozšírenie iné ako vonkajšia sila, použite zodpovedajúce vstavané kľúčové slovo alebo cestu používateľského konštitutívneho zákona.

Postup implementácie používateľských podprogramov

Ak chcete použiť používateľský podprogram, upravte šablónový súbor zahrnutý v distribúcii zdrojového kódu FrontISTR a potom FrontISTR znova zostavte. Používateľské podprogramy nemožno nahrádzať v distribuovaných binárnych súboroch, takže použitie používateľského rozšírenia vyžaduje prostredie, v ktorom možno FrontISTR zostaviť zo zdrojového kódu.

Šablóny používateľských podprogramov sa nachádzajú v fistr1/src/lib/user/, pričom pre každú kategóriu rozšírenia je určený konkrétny súbor na úpravu (názvy súborov nájdete v tabuľke v Prehľade funkcií). V počiatočnom stave súbory obsahujú buď prázdne telá podprogramov, alebo vzorovú lineárne elastickú implementáciu; používateľ do nich pridá vlastný konštitutívny zákon alebo definíciu zaťaženia. Po úprave šablóny FrontISTR bežne znova zostavte pomocou CMake a analýzu spustite výsledným spustiteľným súborom fistr1.

Podrobnosti, ako je význam argumentov podprogramov, spracovanie polí stavových premenných a upozornenia pri opätovnom zostavení, sú uvedené na príslušných stránkach príručky pre vývojárov.

Pozri tiež

AI-assisted translation May contain errors Official docs Status