Salta el contingut

Extensions mitjançant subrutines d'usuari

FrontISTR proporciona un conjunt de subrutines d'usuari per ampliar funcionalitats sense modificar el codi font principal. Inclouen implementacions d'usuari de lleis constitutives i la incorporació de càrregues externes definides per l'usuari. Aquest capítol enumera els punts d'extensió disponibles i les paraules clau del fitxer de control d'anàlisi que s'utilitzen per invocar-los. Per als arguments detallats de les subrutines i els procediments de recompilació, consulteu Subrutines d'usuari (Guia de codificació).

Visió general de les funcions

Els punts d'extensió mitjançant subrutines d'usuari es divideixen en dues categories: lleis constitutives de material i càrregues externes. Pel costat de les lleis constitutives hi ha quatre vies d'invocació —elasticitat lineal, hiperelasticitat, elastoplasticitat i una llei constitutiva d'ús general—, cadascuna activada per una paraula clau independent. Pel costat de les càrregues externes, hi ha una via que llegeix informació de càrrega d'un fitxer extern preparat per l'usuari i l'afegeix al vector global de càrregues i al vector de residus. Cada extensió queda disponible després d'editar el fitxer de plantilla inclòs amb la distribució de FrontISTR i recompilar el programa principal.

Categoria d'extensió Paraula clau de control d'anàlisi Subrutines d'usuari principals Plantilla que cal editar
Elasticitat lineal d'usuari !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Hiperelasticitat d'usuari !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Elastoplasticitat d'usuari (funció de fluència i retorn) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Llei constitutiva d'usuari d'ús general !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Càrrega externa definida per l'usuari !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

No s'admeten lleis d'enduriment definides per l'usuari (una via que conservi la funció de fluència incorporada i substitueixi només la corba d'enduriment per una implementació d'usuari). Si cal una corba d'enduriment definida per l'usuari, seleccioneu !PLASTIC, YIELD=USER i substituïu tota la llei constitutiva elastoplàstica per una implementació d'usuari. Tampoc s'admeten condicions de contorn d'usuari ni punts d'extensió per a processament d'usuari durant el reinici.

!CREEP amb TYPE=USER no està admès. Utilitzeu !USER_MATERIAL per implementar una llei constitutiva dependent del temps com a extensió d'usuari.

Lleis constitutives d'usuari

Les lleis constitutives d'usuari proporcionen un punt d'entrada per implementar en una subrutina externa relacions tensió-deformació que no es poden representar amb els models de material incorporats. Hi ha quatre vies segons el marc de la llei constitutiva incorporada corresponent: elasticitat lineal d'usuari, hiperelasticitat d'usuari, elastoplasticitat d'usuari i llei constitutiva d'usuari d'ús general. En cada via, dins del bloc !MATERIAL de les dades de control d'anàlisi, especifiqueu TYPE=USER o YIELD=USER a la paraula clau corresponent. Es poden especificar fins a 100 constants d'usuari, que es passen a la subrutina.

Elasticitat lineal d'usuari

L'elasticitat lineal d'usuari és la via en què l'usuari calcula la matriu elàstica dins del marc de deformacions infinitesimals. Quan s'especifica !ELASTIC, TYPE=USER a les dades de control d'anàlisi, FrontISTR la tracta com una llei constitutiva de deformació infinitesimal i crida uElasticMatrix (que retorna la matriu elàstica \(D\)) durant el càlcul de la rigidesa de l'element i uElasticUpdate (que retorna la tensió) durant l'actualització de tensions. No l'utilitzeu conjuntament amb un model hiperelàstic o elastoplàstic existent.

Hiperelasticitat d'usuari

La hiperelasticitat d'usuari és la via per calcular tensió i rigidesa tangent a partir de derivades d'una funció d'energia de deformació dins d'un marc de grans deformacions (Total Lagrange). Especifiqueu !HYPERELASTIC, TYPE=USER a les dades de control d'anàlisi. Les subrutines cridades són les mateixes uElasticMatrix i uElasticUpdate que per a l'elasticitat lineal d'usuari, i es comparteix la mateixa plantilla fistr1/src/lib/user/uelastic.f90. Com que l'especificació de la paraula clau determina si FrontISTR tracta la implementació com a deformació infinitesimal o Total Lagrange, la mateixa plantilla no es pot utilitzar simultàniament per a implementacions de deformació infinitesimal i de grans deformacions. Implementeu-la com una de les dues lleis constitutives.

Elastoplasticitat d'usuari

L'elastoplasticitat d'usuari és la via en què l'usuari implementa la funció de fluència i el procediment de retorn. Especifiqueu !PLASTIC, YIELD=USER a les dades de control d'anàlisi. Això entra en una branca independent de les funcions de fluència incorporades de Mises, Mohr-Coulomb i Drucker-Prager. uElastoPlasticMatrix (que retorna la rigidesa tangent elastoplàstica \(D\)) es crida durant el càlcul de la rigidesa de l'element, uBackwardEuler (que transforma la tensió de prova en tensió real i actualitza les variables d'estat) durant l'actualització de tensions, i uElastoPlasticNumStatus (que retorna el nombre de variables d'estat reals que cal conservar) durant la inicialització dels punts de Gauss. No hi ha cap via que substitueixi només la corba d'enduriment per una implementació d'usuari. Encara que només calgui una corba d'enduriment definida per l'usuari, utilitzeu aquesta via per substituir tota la llei constitutiva elastoplàstica per una implementació d'usuari.

Llei constitutiva d'usuari d'ús general

La llei constitutiva d'usuari d'ús general és una via per implementar lleis constitutives que no encaixen en els marcs elàstic, hiperelàstic o elastoplàstic. Especifiqueu !USER_MATERIAL a les dades de control d'anàlisi. Per defecte es tracta dins del marc Updated Lagrange; quan s'especifica KIRCHHOFF, es tracta com a Total Lagrange. El nombre de variables d'estat s'especifica amb NSTATUS. uMatlMatrix (que retorna la rigidesa tangent \(D\)) es crida durant el càlcul de la rigidesa de l'element i uUpdate (que actualitza la tensió i les variables d'estat) durant l'actualització de tensions.

Transmissió de constants d'usuari i variables d'estat

Per a cadascuna de les vies !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER i !USER_MATERIAL, les constants d'usuari escrites a les línies de dades del control d'anàlisi (fins a 100) es passen directament a la subrutina mitjançant l'argument matl. Per a !PLASTIC, YIELD=USER, es passen les constants elàstiques especificades per !ELASTIC i les constants d'usuari subministrades mitjançant les línies de dades de !PLASTIC.

Per a la llei constitutiva d'usuari d'ús general i !PLASTIC, YIELD=USER, la informació d'historial del pas anterior (com la deformació plàstica, la tensió de retorn i el dany) es pot passar a la implementació d'usuari mitjançant la variable d'estat fstat i tornar-se a escriure al final del pas. El nombre de variables d'estat es determina, per a la llei constitutiva d'ús general, mitjançant !USER_MATERIAL i el seu NSTATUS, i per a !PLASTIC, YIELD=USER, mitjançant el valor retornat per uElastoPlasticNumStatus.

Càrregues externes definides per l'usuari

Les càrregues externes definides per l'usuari proporcionen una via per definir forces externes que no es poden representar mitjançant les càrregues concentrades, les càrregues distribuïdes o les forces de volum incorporades. Quan s'escriu !ULOAD, FILE=<fname> a les dades de control d'anàlisi, FrontISTR passa el nom de fitxer especificat a ureadload, i la informació llegida per la implementació d'usuari es conserva com a dades del mòdul.

Les tres subrutines següents corresponen a la invocació de !ULOAD.

  • ureadload: al començament de l'anàlisi, llegeix les càrregues definides per l'usuari del fitxer extern especificat al fitxer de control. La implementació d'usuari obre el fitxer i desa les dades necessàries en variables de mòdul.
  • uloading: es crida mentre s'assembla el vector de càrregues externes de cada pas i afegeix la càrrega d'usuari al vector global de càrregues. El número de pas actual i el factor de càrrega es passen com a arguments.
  • uResidual: es crida mentre s'assembla el vector de residus a cada iteració i afegeix la contribució de la càrrega d'usuari al vector global de residus. Es crida tant des de les iteracions no lineals com des dels càlculs d'equilibri.

No es proporciona cap punt d'extensió per a condicions de contorn d'usuari (extensions d'usuari de desplaçaments prescrits o condicions de contacte). Si es requereix una extensió d'usuari que no sigui una força externa, utilitzeu la paraula clau incorporada corresponent o una via de llei constitutiva d'usuari.

Procediment per implementar subrutines d'usuari

Per utilitzar una subrutina d'usuari, editeu el fitxer de plantilla inclòs amb la distribució del codi font de FrontISTR i després recompileu FrontISTR. Les subrutines d'usuari no es poden substituir en binaris distribuïts, de manera que l'ús d'una extensió d'usuari requereix un entorn on FrontISTR es pugui compilar des del codi font.

Les plantilles de subrutines d'usuari es troben sota fistr1/src/lib/user/, amb un fitxer concret que cal editar per a cada categoria d'extensió (vegeu la taula de Visió general de les funcions per als noms de fitxer). En l'estat inicial, els fitxers contenen cossos de subrutina buits o una implementació elàstica lineal d'exemple; els usuaris hi afegeixen la seva pròpia llei constitutiva o definició de càrrega. Després d'editar la plantilla, recompileu FrontISTR normalment amb CMake i executeu l'anàlisi amb l'executable fistr1 resultant.

Els detalls, com ara el significat dels arguments de les subrutines, el tractament dels arrays de variables d'estat i les precaucions durant la recompilació, es proporcionen a les pàgines corresponents de la guia de codificació.

Vegeu també

AI-assisted translation May contain errors Official docs Status