Sari la conținut

Extensii prin subrutine de utilizator

FrontISTR oferă un set de subrutine de utilizator pentru extinderea funcționalității fără modificarea codului-sursă principal. Acestea acoperă implementări de către utilizator ale legilor constitutive și integrarea sarcinilor externe definite de utilizator. Acest capitol enumeră punctele de extensie disponibile și cuvintele-cheie din fișierul de control al analizei utilizate pentru apelarea fiecăruia. Pentru argumentele detaliate ale subrutinelor și procedurile de recompilare, consultați Subrutine de utilizator (ghid de programare).

Prezentarea generală a funcțiilor

Punctele de extensie prin subrutine de utilizator sunt împărțite în două categorii: legi constitutive de material și sarcini externe. Pentru legile constitutive există patru căi de apel — elasticitate liniară, hiperelasticitate, elastoplasticitate și o lege constitutivă de uz general — fiecare activată printr-un cuvânt-cheie independent. Pentru sarcinile externe este furnizată o cale care citește informațiile despre sarcină dintr-un fișier extern pregătit de utilizator și le adaugă vectorului global de sarcină și vectorului reziduu. Fiecare extensie devine disponibilă după editarea fișierului șablon inclus în distribuția FrontISTR și recompilarea programului principal.

Categoria extensiei Cuvânt-cheie în controlul analizei Subrutine principale ale utilizatorului Șablon de editat
Elasticitate liniară definită de utilizator !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Hiperelasticitate definită de utilizator !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Elastoplasticitate definită de utilizator (funcția de curgere și maparea de revenire) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Lege constitutivă de uz general definită de utilizator !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Sarcină externă definită de utilizator !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Legile de ecruisare definite de utilizator (o cale care păstrează funcția de curgere încorporată și înlocuiește numai curba de ecruisare cu o implementare a utilizatorului) nu sunt acceptate. Dacă este necesară o curbă de ecruisare definită de utilizator, selectați !PLASTIC, YIELD=USER și înlocuiți întreaga lege constitutivă elastoplastică cu o implementare proprie. Condițiile la limită definite de utilizator și punctele de extensie pentru procesarea de către utilizator în timpul restartului nu sunt acceptate.

!CREEP cu TYPE=USER nu este acceptat. Utilizați !USER_MATERIAL pentru a implementa o lege constitutivă dependentă de timp ca extensie de utilizator.

Legi constitutive definite de utilizator

Legile constitutive definite de utilizator oferă un punct de intrare pentru implementarea într-o subrutină externă a relațiilor tensiune-deformație care nu pot fi reprezentate de modelele de material încorporate. Sunt disponibile patru căi, în funcție de cadrul legii constitutive încorporate corespunzătoare: elasticitate liniară definită de utilizator, hiperelasticitate definită de utilizator, elastoplasticitate definită de utilizator și lege constitutivă de uz general definită de utilizator. Pentru fiecare cale, în blocul !MATERIAL al datelor de control ale analizei, specificați TYPE=USER sau YIELD=USER pe cuvântul-cheie corespunzător. Pot fi specificate până la 100 de constante ale utilizatorului, care sunt transmise subrutinei.

Elasticitate liniară definită de utilizator

Elasticitatea liniară definită de utilizator este calea în care utilizatorul calculează matricea elastică în cadrul deformațiilor infinitezimale. Când în datele de control ale analizei se specifică !ELASTIC, TYPE=USER, FrontISTR o tratează ca lege constitutivă pentru deformații infinitezimale și apelează uElasticMatrix (care returnează matricea elastică \(D\)) în timpul calculului rigidității elementului și uElasticUpdate (care returnează tensiunea) în timpul actualizării tensiunii. Nu o utilizați împreună cu un model hiperelastic sau elastoplastic existent.

Hiperelasticitate definită de utilizator

Hiperelasticitatea definită de utilizator este calea pentru calculul tensiunii și al rigidității tangente din derivatele unei funcții de energie de deformație, în cadrul deformațiilor mari (Lagrange total). Specificați !HYPERELASTIC, TYPE=USER în datele de control ale analizei. Subrutinele apelate sunt aceleași uElasticMatrix și uElasticUpdate ca pentru elasticitatea liniară definită de utilizator, iar același șablon fistr1/src/lib/user/uelastic.f90 este partajat. Deoarece specificarea cuvântului-cheie comută modul în care FrontISTR tratează implementarea, ca deformație infinitezimală sau Lagrange total, același șablon nu poate fi utilizat simultan pentru implementări cu deformații infinitezimale și deformații mari. Implementați-l ca una dintre cele două legi constitutive.

Elastoplasticitate definită de utilizator

Elastoplasticitatea definită de utilizator este calea în care utilizatorul implementează funcția de curgere și procedura de mapare de revenire. Specificați !PLASTIC, YIELD=USER în datele de control ale analizei. Aceasta intră într-o ramură independentă de funcțiile de curgere Mises, Mohr-Coulomb și Drucker-Prager încorporate. uElastoPlasticMatrix (care returnează rigiditatea tangentă elastoplastică \(D\)) este apelată în timpul calculului rigidității elementului, uBackwardEuler (care mapează tensiunea de încercare în tensiunea reală și actualizează variabilele de stare) în timpul actualizării tensiunii, iar uElastoPlasticNumStatus (care returnează numărul variabilelor de stare reale ce trebuie păstrate) în timpul inițializării punctelor Gauss. Nu este acceptată o cale care înlocuiește numai curba de ecruisare cu o implementare a utilizatorului. Chiar dacă este necesară numai o curbă de ecruisare definită de utilizator, folosiți această cale pentru a înlocui întreaga lege constitutivă elastoplastică cu o implementare proprie.

Lege constitutivă de uz general definită de utilizator

Legea constitutivă de uz general definită de utilizator este o cale pentru implementarea legilor constitutive care nu se încadrează în cadrele elastic, hiperelastic sau elastoplastic. Specificați !USER_MATERIAL în datele de control ale analizei. În mod implicit, este tratată în cadrul Lagrange actualizat; când este specificat KIRCHHOFF, este tratată ca Lagrange total. Numărul variabilelor de stare este specificat prin NSTATUS. uMatlMatrix (care returnează rigiditatea tangentă \(D\)) este apelată în timpul calculului rigidității elementului, iar uUpdate (care actualizează tensiunea și variabilele de stare) în timpul actualizării tensiunii.

Transmiterea constantelor utilizatorului și a variabilelor de stare

Pentru fiecare dintre căile !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER și !USER_MATERIAL, constantele utilizatorului scrise pe liniile de date din datele de control ale analizei (până la 100) sunt transmise direct subrutinei prin argumentul matl. Pentru !PLASTIC, YIELD=USER, sunt transmise constantele elastice specificate prin !ELASTIC și constantele utilizatorului furnizate prin liniile de date !PLASTIC.

Pentru legea constitutivă de uz general definită de utilizator și !PLASTIC, YIELD=USER, informațiile istorice din pasul precedent (precum deformația plastică, tensiunea de întoarcere și deteriorarea) pot fi transmise implementării utilizatorului prin variabila de stare fstat și scrise înapoi la sfârșitul pasului. Numărul variabilelor de stare este determinat, pentru legea constitutivă de uz general, de !USER_MATERIAL și NSTATUS, iar pentru !PLASTIC, YIELD=USER, de valoarea returnată de uElastoPlasticNumStatus.

Sarcini externe definite de utilizator

Sarcinile externe definite de utilizator oferă o cale pentru definirea forțelor externe care nu pot fi reprezentate prin sarcinile concentrate, sarcinile distribuite sau forțele volumice încorporate. Când !ULOAD, FILE=<fname> este scris în datele de control ale analizei, FrontISTR transmite numele de fișier specificat către ureadload, iar informațiile citite de implementarea utilizatorului sunt păstrate ca date de modul.

Următoarele trei subrutine corespund apelării !ULOAD.

  • ureadload: La începutul analizei, citește sarcinile definite de utilizator din fișierul extern specificat în fișierul de control. Implementarea utilizatorului deschide fișierul și stochează datele necesare în variabile de modul.
  • uloading: Este apelată în timpul asamblării vectorului de sarcină externă pentru fiecare pas și adaugă sarcina utilizatorului la vectorul global de sarcină. Numărul pasului curent și factorul de sarcină sunt transmise ca argumente.
  • uResidual: Este apelată în timpul asamblării vectorului reziduu la fiecare iterație și adaugă contribuția sarcinii utilizatorului la vectorul global de reziduu. Este apelată atât din iterațiile neliniare, cât și din calculele de echilibru.

Nu este furnizat niciun punct de extensie pentru condiții la limită definite de utilizator (extensii ale deplasărilor prescrise sau condițiilor de contact). Dacă este necesară o extensie a utilizatorului diferită de o forță externă, utilizați cuvântul-cheie încorporat corespunzător sau o cale de lege constitutivă definită de utilizator.

Procedura de implementare a subrutinelor de utilizator

Pentru a utiliza o subrutină de utilizator, editați fișierul șablon inclus în distribuția sursă FrontISTR și apoi recompilați FrontISTR. Subrutinele de utilizator nu pot fi înlocuite în binarele distribuite, astfel încât utilizarea unei extensii necesită un mediu în care FrontISTR poate fi compilat din sursă.

Șabloanele subrutinelor de utilizator se află în fistr1/src/lib/user/, cu câte un fișier specific de editat pentru fiecare categorie de extensie (consultați tabelul din Prezentarea generală a funcțiilor pentru numele fișierelor). În starea inițială, fișierele conțin fie corpuri de subrutine goale, fie o implementare liniar-elastică de exemplu; utilizatorii adaugă acolo propria lege constitutivă sau definiție de sarcină. După editarea șablonului, recompilați FrontISTR în mod normal cu CMake și executați analiza cu executabilul fistr1 rezultat.

Detalii precum semnificația argumentelor subrutinelor, gestionarea tablourilor de variabile de stare și precauțiile la recompilare sunt furnizate în paginile corespunzătoare ale ghidului de programare.

A se vedea și

AI-assisted translation May contain errors Official docs Status