Rozšíření uživatelskými podprogramy¶
FrontISTR poskytuje sadu uživatelských podprogramů pro rozšíření funkcí bez úprav hlavního zdrojového kódu. Zahrnují uživatelské implementace konstitutivních zákonů a integraci uživatelsky definovaných vnějších zatížení. Tato kapitola uvádí dostupné body rozšíření a klíčová slova v řídicím souboru analýzy, kterými se jednotlivé body vyvolávají. Podrobné argumenty podprogramů a postupy opětovného sestavení viz Uživatelské podprogramy (příručka pro vývojáře).
Přehled funkcí¶
Body rozšíření uživatelskými podprogramy jsou rozděleny do dvou kategorií: konstitutivní zákony materiálu a vnější zatížení. Pro konstitutivní zákony existují čtyři cesty vyvolání — lineární pružnost, hyperelasticita, elastoplasticita a obecný konstitutivní zákon — z nichž každá se aktivuje samostatným klíčovým slovem. Pro vnější zatížení je k dispozici cesta, která načte informace o zatížení z externího souboru připraveného uživatelem a přidá je do globálního vektoru zatížení a vektoru rezidua. Každé rozšíření je dostupné po úpravě souboru šablony dodávaného s FrontISTR a opětovném sestavení hlavního programu.
| Kategorie rozšíření | Klíčové slovo řízení analýzy | Hlavní uživatelské podprogramy | Šablona k úpravě |
|---|---|---|---|
| Uživatelská lineární pružnost | !ELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Uživatelská hyperelasticita | !HYPERELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Uživatelská elastoplasticita (funkce kluzu a návratové mapování) | !PLASTIC, YIELD=USER |
uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus |
fistr1/src/lib/user/uyield.f90 |
| Obecný uživatelský konstitutivní zákon | !USER_MATERIAL |
uMatlMatrix, uUpdate |
fistr1/src/lib/user/umat.f90 |
| Uživatelsky definované vnější zatížení | !ULOAD, FILE=<fname> |
ureadload, uloading, uResidual |
fistr1/src/lib/user/uload.f90 |
Uživatelsky definované zákony zpevnění (cesta, která zachová vestavěnou funkci kluzu a pouze nahradí křivku zpevnění uživatelskou implementací) nejsou podporovány. Je-li vyžadována uživatelsky definovaná křivka zpevnění, zvolte !PLASTIC, YIELD=USER a nahraďte celý elastoplastický konstitutivní zákon uživatelskou implementací. Uživatelské okrajové podmínky a body rozšíření pro uživatelské zpracování při restartu nejsou podporovány.
!CREEP s TYPE=USER není podporováno. Pro implementaci časově závislého konstitutivního zákona jako uživatelského rozšíření použijte !USER_MATERIAL.
Uživatelské konstitutivní zákony¶
Uživatelské konstitutivní zákony poskytují vstupní bod pro implementaci vztahů napětí–přetvoření, které nelze reprezentovat vestavěnými materiálovými modely, v externím podprogramu. Podle rámce odpovídajícího vestavěného konstitutivního zákona jsou k dispozici čtyři cesty: uživatelská lineární pružnost, uživatelská hyperelasticita, uživatelská elastoplasticita a obecný uživatelský konstitutivní zákon. V každé cestě zadejte v bloku !MATERIAL řídicích dat analýzy na odpovídajícím klíčovém slově TYPE=USER nebo YIELD=USER. Lze zadat až 100 uživatelských konstant, které se předají podprogramu.
Uživatelská lineární pružnost¶
Uživatelská lineární pružnost je cesta, při níž uživatel počítá matici pružnosti v rámci nekonečně malých deformací. Je-li v řídicích datech analýzy zadáno !ELASTIC, TYPE=USER, FrontISTR je považuje za konstitutivní zákon nekonečně malých deformací a při výpočtu tuhosti prvku volá uElasticMatrix (vrací matici pružnosti \(D\)) a při aktualizaci napětí uElasticUpdate (vrací napětí). Nepoužívejte ji současně s existujícím hyperelastickým nebo elastoplastickým modelem.
Uživatelská hyperelasticita¶
Uživatelská hyperelasticita je cesta pro výpočet napětí a tečné tuhosti z derivací funkce deformační energie v rámci velkých deformací (Total Lagrange). V řídicích datech analýzy zadejte !HYPERELASTIC, TYPE=USER. Volají se stejné podprogramy uElasticMatrix a uElasticUpdate jako u uživatelské lineární pružnosti a používá se stejná šablona fistr1/src/lib/user/uelastic.f90. Protože specifikace klíčového slova přepíná, zda FrontISTR považuje implementaci za nekonečně malé deformace nebo Total Lagrange, nelze stejnou šablonu současně použít pro implementaci nekonečně malých i velkých deformací. Implementujte ji jako jeden z těchto dvou konstitutivních zákonů.
Uživatelská elastoplasticita¶
Uživatelská elastoplasticita je cesta, při níž uživatel implementuje funkci kluzu a postup návratového mapování. V řídicích datech analýzy zadejte !PLASTIC, YIELD=USER. Tím se přejde do větve nezávislé na vestavěných funkcích kluzu Mises, Mohr-Coulomb a Drucker-Prager. Při výpočtu tuhosti prvku se volá uElastoPlasticMatrix (vrací elastoplastickou tečnou tuhost \(D\)), při aktualizaci napětí uBackwardEuler (mapuje zkušební napětí na skutečné napětí a aktualizuje stavové proměnné) a při inicializaci Gaussových bodů uElastoPlasticNumStatus (vrací počet uchovávaných stavových proměnných reálného typu). Cesta, která nahrazuje uživatelskou implementací pouze křivku zpevnění, není podporována. I když je potřebná pouze uživatelsky definovaná křivka zpevnění, použijte tuto cestu k nahrazení celého elastoplastického konstitutivního zákona uživatelskou implementací.
Obecný uživatelský konstitutivní zákon¶
Obecný uživatelský konstitutivní zákon je cesta pro implementaci konstitutivních zákonů, které nespadají do rámce pružnosti, hyperelasticity ani elastoplasticity. V řídicích datech analýzy zadejte !USER_MATERIAL. Ve výchozím nastavení se zpracovává v rámci Updated Lagrange; je-li zadáno KIRCHHOFF, zpracovává se jako Total Lagrange. Počet stavových proměnných určuje NSTATUS. Při výpočtu tuhosti prvku se volá uMatlMatrix (vrací tečnou tuhost \(D\)) a při aktualizaci napětí uUpdate (aktualizuje napětí a stavové proměnné).
Předávání uživatelských konstant a stavových proměnných¶
Pro každou z cest !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER a !USER_MATERIAL se uživatelské konstanty zapsané na datových řádcích řídicích dat analýzy (až 100) předávají přímo podprogramu argumentem matl. Pro !PLASTIC, YIELD=USER se předávají elastické konstanty zadané pomocí !ELASTIC a uživatelské konstanty dodané prostřednictvím datových řádků !PLASTIC.
Pro obecný uživatelský konstitutivní zákon a !PLASTIC, YIELD=USER lze historické informace z předchozího kroku (například plastické přetvoření, zpětné napětí a poškození) předat uživatelské implementaci prostřednictvím stavové proměnné fstat a na konci kroku je zapsat zpět. Počet stavových proměnných určuje u obecného uživatelského konstitutivního zákona !USER_MATERIAL a jeho NSTATUS a u !PLASTIC, YIELD=USER návratová hodnota uElastoPlasticNumStatus.
Uživatelsky definovaná vnější zatížení¶
Uživatelsky definovaná vnější zatížení poskytují cestu pro definici vnějších sil, které nelze reprezentovat vestavěnými soustředěnými, rozloženými nebo objemovými zatíženími. Je-li v řídicích datech analýzy zapsáno !ULOAD, FILE=<fname>, FrontISTR předá zadaný název souboru podprogramu ureadload a informace načtené uživatelskou implementací se uchovají jako data modulu.
Vyvolání !ULOAD odpovídají následující tři podprogramy.
ureadload: Na začátku analýzy načte uživatelsky definovaná zatížení z externího souboru zadaného v řídicím souboru. Uživatelská implementace otevře soubor a uloží potřebná data do proměnných modulu.uloading: Volá se při sestavování vektoru vnějšího zatížení pro každý krok a přidává uživatelské zatížení do globálního vektoru zatížení. Jako argumenty se předávají aktuální číslo kroku a faktor zatížení.uResidual: Volá se při sestavování vektoru rezidua v každé iteraci a přidává příspěvek uživatelského zatížení do globálního vektoru rezidua. Volá se z nelineárních iterací i výpočtů rovnováhy.
Pro uživatelské okrajové podmínky (uživatelská rozšíření předepsaného posunutí nebo kontaktních podmínek) není poskytován bod rozšíření. Je-li vyžadováno jiné uživatelské rozšíření než vnější síla, použijte odpovídající vestavěné klíčové slovo nebo cestu uživatelského konstitutivního zákona.
Postup implementace uživatelských podprogramů¶
Chcete-li použít uživatelský podprogram, upravte soubor šablony obsažený v distribuci zdrojového kódu FrontISTR a poté FrontISTR znovu sestavte. Uživatelské podprogramy nelze nahradit v distribuovaných binárních souborech, takže použití uživatelského rozšíření vyžaduje prostředí, v němž lze FrontISTR sestavit ze zdrojového kódu.
Šablony uživatelských podprogramů jsou umístěny v fistr1/src/lib/user/ a pro každou kategorii rozšíření je určen konkrétní soubor k úpravě (názvy souborů viz tabulka v Přehledu funkcí). V počátečním stavu obsahují soubory buď prázdná těla podprogramů, nebo ukázkovou lineárně elastickou implementaci; uživatelé do nich doplní vlastní konstitutivní zákon nebo definici zatížení. Po úpravě šablony FrontISTR běžným způsobem znovu sestavte pomocí CMake a spusťte analýzu výsledným spustitelným souborem fistr1.
Podrobnosti, například význam argumentů podprogramů, zpracování polí stavových proměnných a upozornění pro opětovné sestavení, jsou uvedeny na odpovídajících stránkách příručky pro vývojáře.
- Uživatelské podprogramy (přehled)
- Obecný uživatelský konstitutivní zákon
umat.f - Uživatelská elastoplasticita
uyield.f - Uživatelsky definované vnější zatížení
uload.f - Uživatelská lineární pružnost a uživatelská hyperelasticita
uelastic.f
Viz také¶
- Data materiálu — Možnosti konstitutivních zákonů a seznam vestavěných modelů
- Okrajové podmínky a zatížení — Vestavěné okrajové podmínky a zatížení
- Uživatelské podprogramy (příručka pro vývojáře) — Specifikace argumentů podprogramů a konvence implementace
- !USER_MATERIAL — Syntaxe klíčového slova pro obecný uživatelský konstitutivní zákon
- !ELASTIC — Klíčové slovo lineární pružnosti včetně
TYPE=USER - !HYPERELASTIC — Klíčové slovo hyperelasticity včetně
TYPE=USER - !PLASTIC — Elastoplastické klíčové slovo včetně
YIELD=USER