Proširenja korisničkim potprogramima¶
FrontISTR pruža skup korisničkih potprograma za proširenje funkcionalnosti bez izmjene glavnog izvornog koda. Obuhvaćaju korisničke implementacije konstitutivnih zakona i integraciju korisnički definiranih vanjskih opterećenja. Ovo poglavlje navodi dostupne točke proširenja i ključne riječi u datoteci za upravljanje analizom kojima se svaka od njih poziva. Za detaljne argumente potprograma i postupke ponovne izgradnje pogledajte Korisnički potprogrami (vodič za programiranje).
Pregled funkcija¶
Točke proširenja korisničkim potprogramima podijeljene su u dvije kategorije: konstitutivni zakoni materijala i vanjska opterećenja. Za konstitutivne zakone postoje četiri puta poziva — linearna elastičnost, hiperelastičnost, elastoplastičnost i opći konstitutivni zakon — pri čemu se svaki aktivira zasebnom ključnom riječi. Za vanjska opterećenja postoji put koji učitava podatke o opterećenju iz vanjske datoteke koju pripremi korisnik te ih dodaje globalnom vektoru opterećenja i vektoru reziduala. Svako proširenje postaje dostupno nakon uređivanja predloška uključenog u distribuciju FrontISTR-a i ponovne izgradnje glavnog programa.
| Kategorija proširenja | Ključna riječ upravljanja analizom | Glavni korisnički potprogrami | Predložak za uređivanje |
|---|---|---|---|
| Korisnička linearna elastičnost | !ELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| Korisnička hiperelastičnost | !HYPERELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| Korisnička elastoplastičnost (funkcija tečenja i povratno preslikavanje) | !PLASTIC, YIELD=USER | uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus | fistr1/src/lib/user/uyield.f90 |
| Opći korisnički konstitutivni zakon | !USER_MATERIAL | uMatlMatrix, uUpdate | fistr1/src/lib/user/umat.f90 |
| Korisnički definirano vanjsko opterećenje | !ULOAD, FILE=<fname> | ureadload, uloading, uResidual | fistr1/src/lib/user/uload.f90 |
Korisnički definirani zakoni očvršćivanja (put koji zadržava ugrađenu funkciju tečenja, a samo krivulju očvršćivanja zamjenjuje korisničkom implementacijom) nisu podržani. Ako je potrebna korisnički definirana krivulja očvršćivanja, odaberite !PLASTIC, YIELD=USER i zamijenite cijeli elastoplastični konstitutivni zakon korisničkom implementacijom. Korisnički rubni uvjeti i točke proširenja za korisničku obradu pri ponovnom pokretanju nisu podržani.
!CREEP s TYPE=USER nije podržan. Za implementaciju vremenski ovisnog konstitutivnog zakona kao korisničkog proširenja upotrijebite !USER_MATERIAL.
Korisnički konstitutivni zakoni¶
Korisnički konstitutivni zakoni pružaju ulaznu točku za implementaciju odnosa naprezanje–deformacija koji se ne mogu prikazati ugrađenim modelima materijala u vanjskom potprogramu. Dostupna su četiri puta prema okviru odgovarajućeg ugrađenog konstitutivnog zakona: korisnička linearna elastičnost, korisnička hiperelastičnost, korisnička elastoplastičnost i opći korisnički konstitutivni zakon. U svakom putu unutar bloka !MATERIAL podataka za upravljanje analizom zadajte TYPE=USER ili YIELD=USER na odgovarajućoj ključnoj riječi. Može se zadati do 100 korisničkih konstanti koje se prosljeđuju potprogramu.
Korisnička linearna elastičnost¶
Korisnička linearna elastičnost put je u kojem korisnik izračunava matricu elastičnosti u okviru infinitezimalnih deformacija. Kada je u podacima za upravljanje analizom zadan !ELASTIC, TYPE=USER, FrontISTR ga tretira kao konstitutivni zakon infinitezimalne deformacije te tijekom izračuna krutosti elementa poziva uElasticMatrix (koji vraća matricu elastičnosti \(D\)), a tijekom ažuriranja naprezanja uElasticUpdate (koji vraća naprezanje). Nemojte ga upotrebljavati zajedno s postojećim hiperelastičnim ili elastoplastičnim modelom.
Korisnička hiperelastičnost¶
Korisnička hiperelastičnost put je za izračun naprezanja i tangentne krutosti iz derivacija funkcije energije deformacije u okviru velikih deformacija (totalna Lagrangeova formulacija). U podacima za upravljanje analizom zadajte !HYPERELASTIC, TYPE=USER. Pozivaju se isti potprogrami uElasticMatrix i uElasticUpdate kao kod korisničke linearne elastičnosti i dijeli se isti predložak fistr1/src/lib/user/uelastic.f90. Budući da specifikacija ključne riječi prebacuje način na koji FrontISTR tretira implementaciju između infinitezimalne deformacije i totalne Lagrangeove formulacije, isti predložak ne može se istodobno upotrebljavati za implementacije malih i velikih deformacija. Implementirajte ga kao jedan od ta dva konstitutivna zakona.
Korisnička elastoplastičnost¶
Korisnička elastoplastičnost put je u kojem korisnik implementira funkciju tečenja i postupak povratnog preslikavanja. U podacima za upravljanje analizom zadajte !PLASTIC, YIELD=USER. Time se ulazi u granu neovisnu o ugrađenim Misesovoj, Mohr-Coulombovoj i Drucker-Pragerovoj funkciji tečenja. uElastoPlasticMatrix (vraća elastoplastičnu tangentnu krutost \(D\)) poziva se pri izračunu krutosti elementa, uBackwardEuler (preslikava probno naprezanje u stvarno naprezanje i ažurira varijable stanja) pri ažuriranju naprezanja, a uElastoPlasticNumStatus (vraća broj realnih varijabli stanja koje treba čuvati) pri inicijalizaciji Gaussove točke. Put koji samo krivulju očvršćivanja zamjenjuje korisničkom implementacijom nije podržan. Čak i kada je potrebna samo korisnički definirana krivulja očvršćivanja, ovim putem zamijenite cijeli elastoplastični konstitutivni zakon korisničkom implementacijom.
Opći korisnički konstitutivni zakon¶
Opći korisnički konstitutivni zakon put je za implementaciju konstitutivnih zakona koji se ne uklapaju u okvire elastičnosti, hiperelastičnosti ili elastoplastičnosti. U podacima za upravljanje analizom zadajte !USER_MATERIAL. Zadano se obrađuje u okviru ažurirane Lagrangeove formulacije; kada je zadan KIRCHHOFF, obrađuje se kao totalna Lagrangeova formulacija. Broj varijabli stanja zadaje se s NSTATUS. uMatlMatrix (vraća tangentnu krutost \(D\)) poziva se pri izračunu krutosti elementa, a uUpdate (ažurira naprezanje i varijable stanja) pri ažuriranju naprezanja.
Prosljeđivanje korisničkih konstanti i varijabli stanja¶
Za svaki od putova !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER i !USER_MATERIAL, korisničke konstante zapisane u podatkovnim retcima podataka za upravljanje analizom (do 100) izravno se prosljeđuju potprogramu kroz argument matl. Za !PLASTIC, YIELD=USER prosljeđuju se elastične konstante zadane s !ELASTIC i korisničke konstante zadane podatkovnim retcima !PLASTIC.
Za opći korisnički konstitutivni zakon i !PLASTIC, YIELD=USER, povijesni podaci prethodnog koraka (poput plastične deformacije, povratnog naprezanja i oštećenja) mogu se proslijediti korisničkoj implementaciji kroz varijablu stanja fstat i zapisati natrag na kraju koraka. Broj varijabli stanja za opći korisnički konstitutivni zakon određuju !USER_MATERIAL i njegov NSTATUS, a za !PLASTIC, YIELD=USER povratna vrijednost uElastoPlasticNumStatus.
Korisnički definirana vanjska opterećenja¶
Korisnički definirana vanjska opterećenja pružaju put za definiranje vanjskih sila koje se ne mogu prikazati ugrađenim koncentriranim opterećenjima, raspodijeljenim opterećenjima ili volumenim silama. Kada je !ULOAD, FILE=<fname> zapisano u podacima za upravljanje analizom, FrontISTR prosljeđuje zadani naziv datoteke potprogramu ureadload, a podaci koje korisnička implementacija učita zadržavaju se kao podaci modula.
Sljedeća tri potprograma odgovaraju pozivu !ULOAD.
ureadload: Na početku analize učitava korisnički definirana opterećenja iz vanjske datoteke zadane u upravljačkoj datoteci. Korisnička implementacija otvara datoteku i sprema potrebne podatke u varijable modula.uloading: Poziva se pri sastavljanju vektora vanjskog opterećenja za svaki korak i dodaje korisničko opterećenje globalnom vektoru opterećenja. Trenutačni broj koraka i faktor opterećenja prenose se kao argumenti.uResidual: Poziva se pri sastavljanju vektora reziduala u svakoj iteraciji i dodaje doprinos korisničkog opterećenja globalnom vektoru reziduala. Poziva se i iz nelinearnih iteracija i iz proračuna ravnoteže.
Nije predviđena točka proširenja za korisničke rubne uvjete (korisnička proširenja zadanog pomaka ili kontaktnih uvjeta). Ako je potrebno korisničko proširenje koje nije vanjska sila, upotrijebite odgovarajuću ugrađenu ključnu riječ ili put korisničkog konstitutivnog zakona.
Postupak implementacije korisničkih potprograma¶
Za uporabu korisničkog potprograma uredite predložak uključen u distribuciju izvornog koda FrontISTR-a, a zatim ponovno izgradite FrontISTR. Korisnički potprogrami ne mogu se zamijeniti u distribuiranim binarnim datotekama, pa uporaba korisničkog proširenja zahtijeva okruženje u kojem se FrontISTR može izgraditi iz izvornog koda.
Predlošci korisničkih potprograma nalaze se u fistr1/src/lib/user/, a za svaku kategoriju proširenja uređuje se određena datoteka (nazivi datoteka navedeni su u tablici Pregled funkcija). U početnom stanju datoteke sadrže ili prazna tijela potprograma ili primjer linearno elastične implementacije; korisnici ondje dodaju vlastiti konstitutivni zakon ili definiciju opterećenja. Nakon uređivanja predloška FrontISTR ponovno izgradite na uobičajen način pomoću CMakea i analizu pokrenite dobivenom izvršnom datotekom fistr1.
Pojedinosti poput značenja argumenata potprograma, obrade polja varijabli stanja i mjera opreza pri ponovnoj izgradnji navedene su na odgovarajućim stranicama vodiča za programiranje.
- Korisnički potprogrami (pregled)
- Opći korisnički konstitutivni zakon
umat.f - Korisnička elastoplastičnost
uyield.f - Korisnički definirano vanjsko opterećenje
uload.f - Korisnička linearna elastičnost i korisnička hiperelastičnost
uelastic.f
Vidi također¶
- Podaci o materijalu — mogućnosti konstitutivnih zakona i popis ugrađenih modela
- Rubni uvjeti i opterećenja — ugrađeni rubni uvjeti i opterećenja
- Korisnički potprogrami (vodič za programiranje) — specifikacije argumenata potprograma i konvencije implementacije
- !USER_MATERIAL — sintaksa ključne riječi za opći korisnički konstitutivni zakon
- !ELASTIC — ključna riječ linearne elastičnosti koja uključuje
TYPE=USER - !HYPERELASTIC — ključna riječ hiperelastičnosti koja uključuje
TYPE=USER - !PLASTIC — ključna riječ elastoplastičnosti koja uključuje
YIELD=USER