Přeskočit obsah

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.

Viz také

AI-assisted translation May contain errors Official docs Status