Skoči na vsebino

Razširitve z uporabniškimi podprogrami

FrontISTR ponuja nabor uporabniških podprogramov za razširjanje funkcionalnosti brez spreminjanja glavne izvorne kode. Ti zajemajo uporabniške implementacije konstitutivnih zakonov in vključevanje uporabniško definiranih zunanjih obremenitev. V tem poglavju so navedene razpoložljive razširitvene točke in ključne besede v krmilni datoteki analize, s katerimi se posamezna točka prikliče. Za podrobne argumente podprogramov in postopke ponovne gradnje glejte Uporabniški podprogrami (vodnik za programiranje).

Pregled funkcij

Razširitvene točke uporabniških podprogramov so razdeljene v dve kategoriji: materialni konstitutivni zakoni in zunanje obremenitve. Za konstitutivne zakone so na voljo štiri poti priklica — linearna elastičnost, hiperelastičnost, elastoplastičnost in splošni konstitutivni zakon — vsaka se aktivira z neodvisno ključno besedo. Za zunanje obremenitve je na voljo pot, ki prebere podatke o obremenitvi iz zunanje datoteke, ki jo pripravi uporabnik, in jih doda globalnemu vektorju obremenitve ter vektorju ostanka. Posamezna razširitev postane na voljo po urejanju predloge, vključene v distribucijo FrontISTR, in ponovni gradnji glavnega programa.

Kategorija razširitve Ključna beseda krmiljenja analize Glavni uporabniški podprogrami Predloga za urejanje
Uporabniška linearna elastičnost !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Uporabniška hiperelastičnost !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Uporabniška elastoplastičnost (funkcija tečenja in povratno preslikavanje) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Splošni uporabniški konstitutivni zakon !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Uporabniško definirana zunanja obremenitev !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Uporabniško definirani zakoni utrjevanja (pot, ki ohrani vgrajeno funkcijo tečenja in z uporabniško implementacijo zamenja samo krivuljo utrjevanja) niso podprti. Če je potrebna uporabniško definirana krivulja utrjevanja, izberite !PLASTIC, YIELD=USER in z uporabniško implementacijo zamenjajte celoten elastoplastični konstitutivni zakon. Uporabniški robni pogoji in razširitvene točke za uporabniško obdelavo med ponovnim zagonom niso podprti.

!CREEP z TYPE=USER ni podprt. Za implementacijo časovno odvisnega konstitutivnega zakona kot uporabniške razširitve uporabite !USER_MATERIAL.

Uporabniški konstitutivni zakoni

Uporabniški konstitutivni zakoni zagotavljajo vstopno točko za implementacijo zvez napetost–deformacija, ki jih vgrajeni materialni modeli ne morejo predstaviti, v zunanjem podprogramu. Glede na okvir ustreznega vgrajenega konstitutivnega zakona so na voljo štiri poti: uporabniška linearna elastičnost, uporabniška hiperelastičnost, uporabniška elastoplastičnost in splošni uporabniški konstitutivni zakon. Pri vsaki poti v bloku !MATERIAL krmilnih podatkov analize na ustrezni ključni besedi določite TYPE=USER ali YIELD=USER. Določiti je mogoče do 100 uporabniških konstant, ki se posredujejo podprogramu.

Uporabniška linearna elastičnost

Uporabniška linearna elastičnost je pot, pri kateri uporabnik izračuna elastično matriko v okviru majhnih deformacij. Ko je v podatkih za nadzor analize naveden !ELASTIC, TYPE=USER, FrontISTR obravnava model kot konstitutivni zakon za majhne deformacije ter med izračunom togosti elementa kliče uElasticMatrix (ki vrne elastično matriko \(D\)), med posodabljanjem napetosti pa uElasticUpdate (ki vrne napetost). Ne uporabljajte ga skupaj z obstoječim hiperelastičnim ali elastoplastičnim modelom.

Uporabniška hiperelastičnost

Uporabniška hiperelastičnost je pot za izračun napetosti in tangentne togosti iz odvodov funkcije deformacijske energije v okviru velikih deformacij (Total Lagrange). V podatkih za nadzor analize navedite !HYPERELASTIC, TYPE=USER. Kličeta se ista podprograma uElasticMatrix in uElasticUpdate kot pri uporabniški linearni elastičnosti, uporablja pa se tudi ista predloga fistr1/src/lib/user/uelastic.f90. Ker določitev ključne besede preklopi, ali FrontISTR implementacijo obravnava kot majhne deformacije ali Total Lagrange, iste predloge ni mogoče hkrati uporabljati za implementaciji majhnih in velikih deformacij. Implementirajte jo kot enega od teh dveh konstitutivnih zakonov.

Uporabniška elastoplastičnost

Uporabniška elastoplastičnost je pot, pri kateri uporabnik implementira funkcijo tečenja in postopek povratnega preslikavanja. V krmilnih podatkih analize določite !PLASTIC, YIELD=USER. S tem se izbere veja, neodvisna od vgrajenih Misesove, Mohr-Coulombove in Drucker-Pragerjeve funkcije tečenja. Med izračunom togosti elementa se kliče uElastoPlasticMatrix (vrne elastoplastično tangentno togost \(D\)), med posodabljanjem napetosti uBackwardEuler (preslika poskusno napetost v dejansko napetost in posodobi spremenljivke stanja), med inicializacijo Gaussovih točk pa uElastoPlasticNumStatus (vrne število realnih spremenljivk stanja, ki jih je treba ohraniti). Pot, ki bi z uporabniško implementacijo zamenjala samo krivuljo utrjevanja, ni podprta. Tudi če potrebujete samo uporabniško definirano krivuljo utrjevanja, uporabite to pot in z uporabniško implementacijo zamenjajte celoten elastoplastični konstitutivni zakon.

Splošni uporabniški konstitutivni zakon

Splošni uporabniški konstitutivni zakon je pot za implementacijo konstitutivnih zakonov, ki ne sodijo v elastični, hiperelastični ali elastoplastični okvir. V krmilnih podatkih analize določite !USER_MATERIAL. Privzeto se obravnava v okviru Updated Lagrange; če je določen KIRCHHOFF, se obravnava kot Total Lagrange. Število spremenljivk stanja je določeno z NSTATUS. Med izračunom togosti elementa se kliče uMatlMatrix (vrne tangentno togost \(D\)), med posodabljanjem napetosti pa uUpdate (posodobi napetost in spremenljivke stanja).

Posredovanje uporabniških konstant in spremenljivk stanja

Pri poteh !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER in !USER_MATERIAL se uporabniške konstante, zapisane v podatkovnih vrsticah krmilnih podatkov analize (do 100), neposredno posredujejo podprogramu prek argumenta matl. Pri !PLASTIC, YIELD=USER se posredujejo elastične konstante, določene z !ELASTIC, in uporabniške konstante iz podatkovnih vrstic !PLASTIC.

Pri splošnem uporabniškem konstitutivnem zakonu in !PLASTIC, YIELD=USER je mogoče podatke o zgodovini iz prejšnjega koraka (na primer plastično deformacijo, povratno napetost in poškodbo) prek spremenljivke stanja fstat posredovati uporabniški implementaciji in jih ob koncu koraka zapisati nazaj. Število spremenljivk stanja pri splošnem uporabniškem konstitutivnem zakonu določata !USER_MATERIAL in njegov NSTATUS, pri !PLASTIC, YIELD=USER pa povratna vrednost uElastoPlasticNumStatus.

Uporabniško definirane zunanje obremenitve

Uporabniško definirane zunanje obremenitve omogočajo določitev zunanjih sil, ki jih ni mogoče predstaviti z vgrajenimi koncentriranimi obremenitvami, porazdeljenimi obremenitvami ali prostorninskimi silami. Ko je v podatkih za nadzor analize zapisan !ULOAD, FILE=<fname>, FrontISTR posreduje navedeno ime datoteke podprogramu ureadload, informacije, ki jih prebere uporabniška implementacija, pa se ohranijo kot podatki modula.

Priklicu !ULOAD ustrezajo naslednji trije podprogrami.

  • ureadload: Ob začetku analize prebere uporabniško definirane obremenitve iz zunanje datoteke, določene v krmilni datoteki. Uporabniška implementacija odpre datoteko in shrani potrebne podatke v spremenljivke modula.
  • uloading: Kliče se med sestavljanjem vektorja zunanje obremenitve za vsak korak in uporabniško obremenitev doda globalnemu vektorju obremenitve. Trenutna številka koraka in faktor obremenitve se posredujeta kot argumenta.
  • uResidual: Kliče se med sestavljanjem vektorja ostanka pri vsaki iteraciji in globalnemu vektorju ostanka doda prispevek uporabniške obremenitve. Kliče se tako iz nelinearnih iteracij kot iz izračunov ravnotežja.

Razširitvena točka za uporabniške robne pogoje (uporabniške razširitve predpisanega pomika ali kontaktnih pogojev) ni na voljo. Če je potrebna uporabniška razširitev, ki ni zunanja sila, uporabite ustrezno vgrajeno ključno besedo ali pot uporabniškega konstitutivnega zakona.

Postopek implementacije uporabniških podprogramov

Za uporabo uporabniškega podprograma uredite datoteko predloge, vključeno v distribucijo izvorne kode FrontISTR, nato pa FrontISTR ponovno zgradite. Uporabniških podprogramov ni mogoče zamenjati v distribuiranih binarnih datotekah, zato uporabniška razširitev zahteva okolje, v katerem je mogoče FrontISTR zgraditi iz izvorne kode.

Predloge uporabniških podprogramov so v fistr1/src/lib/user/, pri čemer je za vsako kategorijo razširitve določena datoteka, ki jo je treba urediti (imena datotek so navedena v tabeli v Pregledu funkcij). V začetnem stanju datoteke vsebujejo prazna telesa podprogramov ali vzorčno implementacijo linearne elastičnosti; uporabnik vanje doda lasten konstitutivni zakon ali definicijo obremenitve. Po urejanju predloge FrontISTR običajno ponovno zgradite s CMake in analizo izvedite z dobljeno izvršno datoteko fistr1.

Podrobnosti, kot so pomen argumentov podprogramov, obravnava polj spremenljivk stanja in previdnostni ukrepi pri ponovni gradnji, so navedene na ustreznih straneh vodnika za programiranje.

Glejte tudi

AI-assisted translation May contain errors Official docs Status