Utökningar med användarsubrutiner¶
FrontISTR tillhandahåller en uppsättning användarsubrutiner för att utöka funktionaliteten utan att ändra huvudkällkoden. De omfattar användarimplementeringar av konstitutiva lagar och integrering av användardefinierade externa laster. Det här kapitlet listar tillgängliga utökningspunkter och de nyckelord i analysstyrfilen som används för att anropa dem. För detaljer om subrutinargument och ombyggnadsprocedurer, se Användarsubrutiner (kodningsguide).
Översikt över funktionerna¶
Utökningspunkter med användarsubrutiner delas in i två kategorier: materialets konstitutiva lagar och externa laster. På sidan för konstitutiva lagar finns fyra anropsvägar—linjär elasticitet, hyperelasticitet, elastoplasticitet och en generell konstitutiv lag—som var och en aktiveras av ett eget nyckelord. För externa laster finns en väg som läser in lastinformation från en extern fil som användaren har förberett och lägger den till den globala lastvektorn och residualvektorn. Varje utökning blir tillgänglig efter att mallfilen som ingår i FrontISTR-distributionen har redigerats och huvudprogrammet har byggts om.
| Utökningskategori | Nyckelord i analysstyrning | Huvudsakliga användarsubrutiner | Mall som ska redigeras |
|---|---|---|---|
| Användardefinierad linjär elasticitet | !ELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Användardefinierad hyperelasticitet | !HYPERELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Användardefinierad elastoplasticitet (flytfunktion och återföringsalgoritm) | !PLASTIC, YIELD=USER |
uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus |
fistr1/src/lib/user/uyield.f90 |
| Generell användardefinierad konstitutiv lag | !USER_MATERIAL |
uMatlMatrix, uUpdate |
fistr1/src/lib/user/umat.f90 |
| Användardefinierad extern last | !ULOAD, FILE=<fname> |
ureadload, uloading, uResidual |
fistr1/src/lib/user/uload.f90 |
Användardefinierade hårdnandelagar (en väg som behåller den inbyggda flytfunktionen men endast ersätter hårdnandekurvan med en användarimplementation) stöds inte. Om en användardefinierad hårdnandekurva krävs väljer du !PLASTIC, YIELD=USER och ersätter hela den elastoplastiska konstitutiva lagen med en användarimplementation. Användardefinierade randvillkor och utökningspunkter för användarbearbetning vid omstart stöds inte.
!CREEP med TYPE=USER stöds inte. Använd !USER_MATERIAL för att implementera en tidsberoende konstitutiv lag som användarutökning.
Användardefinierade konstitutiva lagar¶
Användardefinierade konstitutiva lagar ger en ingång för att implementera spännings–töjningssamband som inte kan representeras av de inbyggda materialmodellerna i en extern subrutin. Fyra vägar finns tillgängliga beroende på ramverket för motsvarande inbyggda konstitutiva lag: användardefinierad linjär elasticitet, användardefinierad hyperelasticitet, användardefinierad elastoplasticitet och en generell användardefinierad konstitutiv lag. För varje väg anger du, inom !MATERIAL-blocket i analysstyrdata, TYPE=USER eller YIELD=USER för motsvarande nyckelord. Upp till 100 användarkonstanter kan anges och överförs till subrutinen.
Användardefinierad linjär elasticitet¶
Användardefinierad linjär elasticitet är den väg där användaren beräknar den elastiska matrisen inom ramen för infinitesimal deformation. När !ELASTIC, TYPE=USER anges i analysstyrdata behandlar FrontISTR den som en konstitutiv lag för infinitesimal deformation och anropar uElasticMatrix (som returnerar den elastiska matrisen \(D\)) vid beräkning av elementstyvhet och uElasticUpdate (som returnerar spänning) vid uppdatering av spänning. Använd den inte tillsammans med en befintlig hyperelastisk eller elastoplastisk modell.
Användardefinierad hyperelasticitet¶
Användardefinierad hyperelasticitet är vägen för att beräkna spänning och tangentstyvhet från derivator av en töjningsenergifunktion inom ett ramverk för stor deformation (Total Lagrange). Ange !HYPERELASTIC, TYPE=USER i analysstyrdata. De anropade subrutinerna är samma uElasticMatrix och uElasticUpdate som för användardefinierad linjär elasticitet, och samma mall fistr1/src/lib/user/uelastic.f90 delas. Eftersom nyckelordsangivelsen växlar mellan om FrontISTR behandlar implementationen som infinitesimal deformation eller Total Lagrange kan samma mall inte användas samtidigt för både implementationer med infinitesimal och stor deformation. Implementera den som en av de två konstitutiva lagarna.
Användardefinierad elastoplasticitet¶
Användardefinierad elastoplasticitet är den väg där användaren implementerar flytfunktionen och återföringsproceduren. Ange !PLASTIC, YIELD=USER i analysstyrdata. Detta går in i en gren som är oberoende av de inbyggda flytfunktionerna Mises, Mohr-Coulomb och Drucker-Prager. uElastoPlasticMatrix (som returnerar elastoplastisk tangentstyvhet \(D\)) anropas vid beräkning av elementstyvhet, uBackwardEuler (som mappar provspänningen till den verkliga spänningen och uppdaterar tillståndsvariabler) vid uppdatering av spänning och uElastoPlasticNumStatus (som returnerar antalet reellvärda tillståndsvariabler som ska behållas) vid initiering av Gauss-punkter. En väg som endast ersätter hårdnandekurvan med en användarimplementation stöds inte. Även när endast en användardefinierad hårdnandekurva behövs ska du använda denna väg för att ersätta hela den elastoplastiska konstitutiva lagen med en användarimplementation.
Generell användardefinierad konstitutiv lag¶
Den generella användardefinierade konstitutiva lagen är en väg för att implementera konstitutiva lagar som inte passar inom ramverken för elasticitet, hyperelasticitet eller elastoplasticitet. Ange !USER_MATERIAL i analysstyrdata. Som standard hanteras den inom ramverket Updated Lagrange; när KIRCHHOFF anges hanteras den som Total Lagrange. Antalet tillståndsvariabler anges med NSTATUS. uMatlMatrix (som returnerar tangentstyvhet \(D\)) anropas vid beräkning av elementstyvhet och uUpdate (som uppdaterar spänning och tillståndsvariabler) vid uppdatering av spänning.
Överföring av användarkonstanter och tillståndsvariabler¶
För var och en av vägarna !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER och !USER_MATERIAL överförs användarkonstanterna som skrivs på datarader i analysstyrdata (upp till 100) direkt till subrutinen genom argumentet matl. För !PLASTIC, YIELD=USER överförs de elastiska konstanter som anges med !ELASTIC och användarkonstanterna som anges via dataraderna för !PLASTIC.
För den generella användardefinierade konstitutiva lagen och !PLASTIC, YIELD=USER kan historikinformation från föregående steg (såsom plastisk töjning, backspänning och skada) överföras till användarimplementationen via tillståndsvariabeln fstat och skrivas tillbaka i slutet av steget. Antalet tillståndsvariabler bestäms för den generella användardefinierade konstitutiva lagen av !USER_MATERIAL och dess NSTATUS, och för !PLASTIC, YIELD=USER av returvärdet från uElastoPlasticNumStatus.
Användardefinierade externa laster¶
Användardefinierade externa laster ger en väg för att definiera externa krafter som inte kan representeras av de inbyggda koncentrerade lasterna, utbredda lasterna eller volymkrafterna. När !ULOAD, FILE=<fname> skrivs i analysstyrdata överför FrontISTR det angivna filnamnet till ureadload, och den information som läses av användarimplementationen behålls som moduldata.
Följande tre subrutiner motsvarar anrop av !ULOAD.
ureadload: Vid analysens start läser den användardefinierade laster från den externa fil som anges i styrfilen. Användarimplementationen öppnar filen och lagrar de data som behövs i modulvariabler.uloading: Anropas när den externa lastvektorn sätts samman för varje steg och lägger till användarlasten i den globala lastvektorn. Aktuellt stegnummer och lastfaktor överförs som argument.uResidual: Anropas när residualvektorn sätts samman vid varje iteration och lägger till användarlastens bidrag till den globala residualvektorn. Den anropas både från icke-linjära iterationer och jämviktsberäkningar.
Ingen utökningspunkt tillhandahålls för användardefinierade randvillkor (användarutökningar av föreskriven förskjutning eller kontaktvillkor). Om en annan användarutökning än en extern kraft krävs använder du motsvarande inbyggda nyckelord eller en väg för användardefinierad konstitutiv lag.
Procedur för implementering av användarsubrutiner¶
För att använda en användarsubrutin redigerar du mallfilen som ingår i FrontISTR:s källdistribution och bygger sedan om FrontISTR. Användarsubrutiner kan inte ersättas i distribuerade binärer, så användning av en användarutökning kräver en miljö där FrontISTR kan byggas från källkod.
Mallarna för användarsubrutiner finns under fistr1/src/lib/user/, med en specifik fil att redigera för varje utökningskategori (se tabellen i Översikt över funktionerna för filnamn). I ursprungligt skick innehåller filerna antingen tomma subrutinkroppar eller ett exempel på en linjärelastisk implementation; användaren lägger till sin egen konstitutiva lag eller lastdefinition där. Efter att mallen har redigerats bygger du om FrontISTR på vanligt sätt med CMake och kör analysen med den resulterande körbara filen fistr1.
Detaljer såsom betydelsen av subrutinargument, hantering av arrayer med tillståndsvariabler och försiktighetsåtgärder vid ombyggnad finns på motsvarande sidor i kodningsguiden.
- Användarsubrutiner (översikt)
- Generell användardefinierad konstitutiv lag
umat.f - Användardefinierad elastoplasticitet
uyield.f - Användardefinierad extern last
uload.f - Användardefinierad linjär elasticitet och användardefinierad hyperelasticitet
uelastic.f
Se även¶
- Materialdata — alternativ för konstitutiva lagar och lista över inbyggda modeller
- Randvillkor och laster — inbyggda randvillkor och laster
- Användarsubrutiner (kodningsguide) — specifikationer för subrutinargument och implementeringskonventioner
- !USER_MATERIAL — nyckelordssyntax för den generella användardefinierade konstitutiva lagen
- !ELASTIC — nyckelord för linjär elasticitet inklusive
TYPE=USER - !HYPERELASTIC — nyckelord för hyperelasticitet inklusive
TYPE=USER - !PLASTIC — elastoplastiskt nyckelord inklusive
YIELD=USER