Bővítés felhasználói szubrutinokkal¶
A FrontISTR felhasználói szubrutinok készletét biztosítja a funkciók bővítéséhez anélkül, hogy a fő forráskódot módosítani kellene. Ezek felhasználói konstitutív törvények megvalósítását és felhasználó által definiált külső terhelések integrálását fedik le. Ez a fejezet felsorolja a rendelkezésre álló bővítési pontokat és az elemzésvezérlő fájl azon kulcsszavait, amelyekkel az egyes bővítések meghívhatók. A szubrutinok részletes argumentumait és az újrafordítás menetét lásd: Felhasználói szubrutinok (kódolási útmutató).
A funkciók áttekintése¶
A felhasználói szubrutinok bővítési pontjai két kategóriába sorolhatók: anyagi konstitutív törvények és külső terhelések. A konstitutív törvényekhez négy meghívási út áll rendelkezésre — lineáris rugalmasság, hiperelaszticitás, elasztoplaszticitás és általános célú konstitutív törvény —, amelyeket egymástól független kulcsszavak aktiválnak. A külső terhelésekhez olyan út áll rendelkezésre, amely a felhasználó által elkészített külső fájlból beolvassa a terhelési adatokat, majd hozzáadja azokat a globális terhelésvektorhoz és maradékvektorhoz. Minden bővítés a FrontISTR-disztribúcióban található sablonfájl szerkesztése és a főprogram újrafordítása után válik használhatóvá.
| Bővítési kategória | Elemzésvezérlő kulcsszó | Fő felhasználói szubrutinok | Szerkesztendő sablon |
|---|---|---|---|
| Felhasználói lineáris rugalmasság | !ELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| Felhasználói hiperelaszticitás | !HYPERELASTIC, TYPE=USER | uElasticMatrix, uElasticUpdate | fistr1/src/lib/user/uelastic.f90 |
| Felhasználói elasztoplaszticitás (folyási függvény és visszatérési leképezés) | !PLASTIC, YIELD=USER | uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus | fistr1/src/lib/user/uyield.f90 |
| Általános célú felhasználói konstitutív törvény | !USER_MATERIAL | uMatlMatrix, uUpdate | fistr1/src/lib/user/umat.f90 |
| Felhasználó által definiált külső terhelés | !ULOAD, FILE=<fname> | ureadload, uloading, uResidual | fistr1/src/lib/user/uload.f90 |
Felhasználó által definiált keményedési törvények — vagyis olyan út, amely a beépített folyási függvényt megtartja, és csak a keményedési görbét cseréli felhasználói megvalósításra — nem támogatottak. Ha felhasználó által definiált keményedési görbére van szükség, válassza a !PLASTIC, YIELD=USER lehetőséget, és a teljes elasztoplasztikus konstitutív törvényt cserélje felhasználói megvalósításra. Felhasználói peremfeltételek és a restart során végrehajtott felhasználói feldolgozás bővítési pontjai szintén nem támogatottak.
A !CREEP TYPE=USER beállítása nem támogatott. Időfüggő konstitutív törvény felhasználói bővítésként való megvalósításához használja a !USER_MATERIAL kulcsszót.
Felhasználói konstitutív törvények¶
A felhasználói konstitutív törvények belépési pontot adnak olyan feszültség–alakváltozás kapcsolatok külső szubrutinban történő megvalósításához, amelyeket a beépített anyagmodellek nem képesek leírni. A megfelelő beépített konstitutív törvény keretrendszerétől függően négy út érhető el: felhasználói lineáris rugalmasság, felhasználói hiperelaszticitás, felhasználói elasztoplaszticitás és általános célú felhasználói konstitutív törvény. Mindegyik útnál az analízisvezérlő adatok !MATERIAL blokkján belül a megfelelő kulcsszónál adja meg a TYPE=USER vagy YIELD=USER beállítást. Legfeljebb 100 felhasználói konstans adható meg, amelyek továbbításra kerülnek a szubrutinnak.
Felhasználói lineáris rugalmasság¶
A felhasználói lineáris rugalmasság olyan út, amelyben a felhasználó a végtelenül kis alakváltozás keretrendszerében számítja ki a rugalmassági mátrixot. Ha az analízisvezérlő adatokban !ELASTIC, TYPE=USER van megadva, a FrontISTR végtelenül kis alakváltozású konstitutív törvényként kezeli, és az elemmerevség számításakor az uElasticMatrix szubrutint hívja meg (amely a \(D\) rugalmassági mátrixot adja vissza), a feszültség frissítésekor pedig az uElasticUpdate szubrutint (amely a feszültséget adja vissza). Ne használja meglévő hiperelasztikus vagy elasztoplasztikus modellel együtt.
Felhasználói hiperelaszticitás¶
A felhasználói hiperelaszticitás nagy alakváltozású (teljes Lagrange-) keretrendszerben a deformációsenergia-függvény deriváltjaiból számítja a feszültséget és az érintőmerevséget. Az analízisvezérlő adatokban adja meg a !HYPERELASTIC, TYPE=USER beállítást. A meghívott szubrutinok ugyanazok az uElasticMatrix és uElasticUpdate, mint a felhasználói lineáris rugalmasságnál, és ugyanaz a fistr1/src/lib/user/uelastic.f90 sablon használatos. Mivel a kulcsszó megadása dönti el, hogy a FrontISTR a megvalósítást végtelenül kis alakváltozásként vagy teljes Lagrange-formulációként kezeli-e, ugyanaz a sablon nem használható egyszerre a kis és nagy alakváltozású megvalósításhoz. A kettő közül az egyik konstitutív törvényként valósítsa meg.
Felhasználói elasztoplaszticitás¶
A felhasználói elasztoplaszticitás olyan út, amelyben a felhasználó valósítja meg a folyási függvényt és a visszatérési leképezési eljárást. Az analízisvezérlő adatokban adja meg a !PLASTIC, YIELD=USER beállítást. Ez a beépített Mises-, Mohr–Coulomb- és Drucker–Prager-folyási függvényektől független ágba lép. Az elemmerevség számításakor az uElastoPlasticMatrix hívódik meg (amely a \(D\) elasztoplasztikus érintőmerevséget adja vissza), a feszültség frissítésekor az uBackwardEuler (amely a próbafeszültséget valós feszültséggé képezi le, és frissíti az állapotváltozókat), a Gauss-pontok inicializálásakor pedig az uElastoPlasticNumStatus (amely a megőrzendő valós értékű állapotváltozók számát adja vissza). Nem támogatott olyan út, amely kizárólag a keményedési görbét cseréli felhasználói megvalósításra. Akkor is ezt az utat használja a teljes elasztoplasztikus konstitutív törvény felhasználói megvalósításra cseréléséhez, ha csak felhasználó által definiált keményedési görbére van szükség.
Általános célú felhasználói konstitutív törvény¶
Az általános célú felhasználói konstitutív törvény olyan konstitutív törvények megvalósítására szolgál, amelyek nem illeszkednek a rugalmas, hiperelasztikus vagy elasztoplasztikus keretrendszerekbe. Az analízisvezérlő adatokban adja meg a !USER_MATERIAL kulcsszót. Alapértelmezés szerint frissített Lagrange-keretrendszerben kezeli a program; KIRCHHOFF megadásakor teljes Lagrange-formulációként. Az állapotváltozók számát az NSTATUS adja meg. Az elemmerevség számításakor az uMatlMatrix hívódik meg (amely a \(D\) érintőmerevséget adja vissza), a feszültség frissítésekor pedig az uUpdate (amely frissíti a feszültséget és az állapotváltozókat).
Felhasználói konstansok és állapotváltozók átadása¶
A !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER és !USER_MATERIAL utak mindegyikénél az analízisvezérlő adatok adatsoraiba írt felhasználói konstansok (legfeljebb 100) közvetlenül, a matl argumentumon keresztül kerülnek a szubrutinhoz. !PLASTIC, YIELD=USER esetén a !ELASTIC által megadott rugalmassági konstansok és a !PLASTIC adatsorain átadott felhasználói konstansok kerülnek továbbításra.
Az általános célú felhasználói konstitutív törvénynél és a !PLASTIC, YIELD=USER esetén az előző lépés történeti információi — például képlékeny alakváltozás, visszafeszültség és károsodás — az fstat állapotváltozón keresztül átadhatók a felhasználói megvalósításnak, majd a lépés végén visszaírhatók. Az állapotváltozók számát az általános célú felhasználói konstitutív törvénynél a !USER_MATERIAL és annak NSTATUS értéke, a !PLASTIC, YIELD=USER esetén pedig az uElastoPlasticNumStatus visszatérési értéke határozza meg.
Felhasználó által definiált külső terhelések¶
A felhasználó által definiált külső terhelések olyan külső erők megadására szolgálnak, amelyeket a beépített koncentrált terhelések, megoszló terhelések vagy térfogati erők nem képesek leírni. Ha az analízisvezérlő adatokban !ULOAD, FILE=<fname> szerepel, a FrontISTR átadja a megadott fájlnevet az ureadload szubrutinnak, és a felhasználói megvalósítás által beolvasott információ modulszintű adatként marad meg.
A !ULOAD meghívásához a következő három szubrutin tartozik.
ureadload: Az elemzés kezdetén beolvassa a felhasználó által definiált terheléseket a vezérlőfájlban megadott külső fájlból. A felhasználói megvalósítás nyitja meg a fájlt, és a szükséges adatokat modulváltozókban tárolja.uloading: Az egyes lépések külső terhelésvektorának összeállításakor hívódik meg, és hozzáadja a felhasználói terhelést a globális terhelésvektorhoz. Argumentumként megkapja az aktuális lépésszámot és terhelési tényezőt.uResidual: Az egyes iterációk maradékvektorának összeállításakor hívódik meg, és hozzáadja a felhasználói terhelés hozzájárulását a globális maradékvektorhoz. Nemlineáris iterációkból és egyensúlyszámításokból egyaránt meghívódik.
Felhasználói peremfeltételekhez — például előírt elmozdulás vagy kontaktusfeltételek felhasználói bővítéséhez — nincs bővítési pont. Ha külső erőtől eltérő felhasználói bővítésre van szükség, használja a megfelelő beépített kulcsszót vagy valamelyik felhasználói konstitutív törvény útját.
Felhasználói szubrutinok megvalósításának menete¶
Felhasználói szubrutin használatához szerkessze a FrontISTR forrásdisztribúciójában található sablonfájlt, majd fordítsa újra a FrontISTR-t. A felhasználói szubrutinok a terjesztett binárisokban nem cserélhetők le, ezért a felhasználói bővítéshez olyan környezet szükséges, amelyben a FrontISTR forrásból lefordítható.
A felhasználói szubrutinok sablonjai a fistr1/src/lib/user/ alatt találhatók; minden bővítési kategóriához meghatározott fájlt kell szerkeszteni (a fájlneveket lásd A funkciók áttekintése táblázatban). Kezdeti állapotukban a fájlok üres szubrutin-törzset vagy egy minta lineárisan rugalmas megvalósítást tartalmaznak; a felhasználó ide írja saját konstitutív törvényét vagy terhelésdefinícióját. A sablon szerkesztése után fordítsa újra a FrontISTR-t a szokásos módon CMake használatával, majd futtassa az elemzést az így létrejött fistr1 végrehajtható állománnyal.
A szubrutinargumentumok jelentését, az állapotváltozó-tömbök kezelését és az újrafordítás során betartandó óvintézkedéseket a kódolási útmutató megfelelő oldalai ismertetik.
- Felhasználói szubrutinok (áttekintés)
- Általános célú felhasználói konstitutív törvény
umat.f - Felhasználói elasztoplaszticitás
uyield.f - Felhasználó által definiált külső terhelés
uload.f - Felhasználói lineáris rugalmasság és felhasználói hiperelaszticitás
uelastic.f
Kapcsolódó témák¶
- Anyagadatok — konstitutív törvények lehetőségei és a beépített modellek listája
- Peremfeltételek és terhelések — beépített peremfeltételek és terhelések
- Felhasználói szubrutinok (kódolási útmutató) — szubrutinargumentumok specifikációja és megvalósítási konvenciók
- !USER_MATERIAL — az általános célú felhasználói konstitutív törvény kulcsszavának szintaxisa
- !ELASTIC — lineárisan rugalmas kulcsszó, beleértve a
TYPE=USERbeállítást - !HYPERELASTIC — hiperelasztikus kulcsszó, beleértve a
TYPE=USERbeállítást - !PLASTIC — elasztoplasztikus kulcsszó, beleértve a
YIELD=USERbeállítást