Aller au contenu

Extensions par sous-routines utilisateur

FrontISTR fournit un ensemble de sous-routines utilisateur permettant d'étendre ses fonctionnalités sans modifier le code source principal. Elles couvrent l'implémentation par l'utilisateur de lois de comportement ainsi que l'intégration de charges externes définies par l'utilisateur. Ce chapitre répertorie les points d'extension disponibles et les mots-clés du fichier de contrôle d'analyse permettant d'appeler chacun d'eux. Pour les spécifications détaillées des arguments des sous-routines et les procédures de recompilation, voir Sous-routines utilisateur (guide de codage).

Vue d'ensemble des fonctions

Les points d'extension par sous-routines utilisateur se répartissent en deux catégories : les lois de comportement des matériaux et les charges externes. Pour les lois de comportement, quatre voies d'appel sont disponibles — élasticité linéaire, hyperélasticité, élastoplasticité et loi de comportement générale — chacune étant activée par un mot-clé indépendant. Pour les charges externes, une voie permet de lire les informations de charge depuis un fichier externe préparé par l'utilisateur et de les ajouter au vecteur global des charges ainsi qu'au vecteur des résidus. Chaque extension devient utilisable après modification du fichier modèle inclus dans la distribution de FrontISTR et recompilation du programme principal.

Catégorie d'extension Mot-clé de contrôle d'analyse Principales sous-routines utilisateur Modèle à modifier
Élasticité linéaire utilisateur !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Hyperélasticité utilisateur !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Élastoplasticité utilisateur (fonction de charge et retour plastique) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Loi de comportement utilisateur générale !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Charge externe définie par l'utilisateur !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Les lois d'écrouissage définies par l'utilisateur (voie qui conserve la fonction de charge intégrée tout en remplaçant uniquement la courbe d'écrouissage par une implémentation utilisateur) ne sont pas prises en charge. Si une courbe d'écrouissage définie par l'utilisateur est nécessaire, sélectionnez !PLASTIC, YIELD=USER et remplacez l'ensemble de la loi de comportement élastoplastique par une implémentation utilisateur. Les conditions aux limites utilisateur et les points d'extension destinés au traitement utilisateur lors d'un redémarrage ne sont pas pris en charge.

TYPE=USER n'est pas pris en charge pour !CREEP. Utilisez !USER_MATERIAL pour implémenter une loi de comportement dépendant du temps en tant qu'extension utilisateur.

Lois de comportement utilisateur

Les lois de comportement utilisateur constituent un point d'entrée permettant d'implémenter, dans une sous-routine externe, des relations contrainte-déformation qui ne peuvent pas être représentées par les modèles de matériau intégrés. Quatre voies sont disponibles selon le cadre de la loi de comportement intégrée correspondante : élasticité linéaire utilisateur, hyperélasticité utilisateur, élastoplasticité utilisateur et loi de comportement utilisateur générale. Pour chacune de ces voies, spécifiez TYPE=USER ou YIELD=USER sur le mot-clé correspondant dans le bloc !MATERIAL des données de contrôle d'analyse. Il est possible de spécifier jusqu'à 100 constantes utilisateur, qui sont transmises à la sous-routine.

Élasticité linéaire utilisateur

L'élasticité linéaire utilisateur est la voie dans laquelle l'utilisateur calcule la matrice d'élasticité dans le cadre des petites déformations. Lorsque !ELASTIC, TYPE=USER est spécifié dans les données de contrôle d'analyse, FrontISTR la traite comme une loi de comportement en petites déformations et appelle uElasticMatrix (qui renvoie la matrice d'élasticité \(D\)) lors du calcul de la rigidité des éléments, ainsi que uElasticUpdate (qui renvoie les contraintes) lors de la mise à jour des contraintes. Ne l'utilisez pas conjointement avec un modèle hyperélastique ou élastoplastique existant.

Hyperélasticité utilisateur

L'hyperélasticité utilisateur est la voie permettant de calculer les contraintes et la rigidité tangente à partir des dérivées d'une fonction d'énergie de déformation dans le cadre des grandes déformations (Total Lagrange). Spécifiez !HYPERELASTIC, TYPE=USER dans les données de contrôle d'analyse. Les sous-routines appelées sont les mêmes uElasticMatrix et uElasticUpdate que pour l'élasticité linéaire utilisateur, et le même modèle fistr1/src/lib/user/uelastic.f90 est partagé. Comme le mot-clé détermine si FrontISTR traite l'implémentation en petites déformations ou selon la formulation Total Lagrange, le même modèle ne peut pas être utilisé simultanément pour les deux types d'implémentation. Implémentez-le comme l'une ou l'autre de ces lois de comportement.

Élastoplasticité utilisateur

L'élastoplasticité utilisateur est la voie dans laquelle l'utilisateur implémente la fonction de charge et la procédure de retour plastique (return-mapping). Spécifiez !PLASTIC, YIELD=USER dans les données de contrôle d'analyse. Cette option emprunte une branche distincte de celles des fonctions de charge intégrées de Mises, Mohr-Coulomb et Drucker-Prager. uElastoPlasticMatrix (qui renvoie la rigidité tangente élastoplastique \(D\)) est appelée lors du calcul de la rigidité des éléments, uBackwardEuler (qui projette la contrainte d'essai sur la contrainte réelle et met à jour les variables d'état) lors de la mise à jour des contraintes, et uElastoPlasticNumStatus (qui renvoie le nombre de variables d'état réelles à conserver) lors de l'initialisation des points de Gauss. Aucune voie permettant de remplacer uniquement la courbe d'écrouissage par une implémentation utilisateur n'est prise en charge. Même si seule une courbe d'écrouissage utilisateur est nécessaire, utilisez cette voie pour remplacer l'ensemble de la loi de comportement élastoplastique par une implémentation utilisateur.

Loi de comportement utilisateur générale

La loi de comportement utilisateur générale permet d'implémenter des lois qui ne s'inscrivent pas dans les cadres élastique, hyperélastique ou élastoplastique. Spécifiez !USER_MATERIAL dans les données de contrôle d'analyse. Par défaut, elle est traitée dans le cadre de la formulation Updated Lagrange ; lorsque KIRCHHOFF est spécifié, elle est traitée selon la formulation Total Lagrange. Le nombre de variables d'état est spécifié par NSTATUS. uMatlMatrix (qui renvoie la rigidité tangente \(D\)) est appelée lors du calcul de la rigidité des éléments, et uUpdate (qui met à jour les contraintes et les variables d'état) lors de la mise à jour des contraintes.

Transmission des constantes utilisateur et des variables d'état

Pour chacune des voies !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER et !USER_MATERIAL, les constantes utilisateur inscrites sur les lignes de données des données de contrôle d'analyse (jusqu'à 100) sont transmises directement à la sous-routine par l'argument matl. Pour !PLASTIC, YIELD=USER, les constantes élastiques spécifiées par !ELASTIC ainsi que les constantes utilisateur fournies par les lignes de données de !PLASTIC sont transmises.

Pour la loi de comportement utilisateur générale et !PLASTIC, YIELD=USER, les informations d'historique de l'étape précédente (telles que la déformation plastique, la contrainte de rappel et l'endommagement) peuvent être transmises à l'implémentation utilisateur par la variable d'état fstat, puis réécrites à la fin de l'étape. Le nombre de variables d'état est déterminé, pour la loi de comportement utilisateur générale, par NSTATUS de !USER_MATERIAL et, pour !PLASTIC, YIELD=USER, par la valeur de retour de uElastoPlasticNumStatus.

Charges externes définies par l'utilisateur

Les charges externes définies par l'utilisateur permettent de définir des forces externes qui ne peuvent pas être représentées par les charges concentrées, les charges réparties ou les forces volumiques intégrées. Lorsque !ULOAD, FILE=<fname> est inscrit dans les données de contrôle d'analyse, FrontISTR transmet le nom de fichier spécifié à ureadload, et les informations lues par l'implémentation utilisateur sont conservées comme données de module.

Les trois sous-routines suivantes correspondent à l'appel de !ULOAD.

  • ureadload : au début de l'analyse, lit les charges définies par l'utilisateur dans le fichier externe spécifié dans le fichier de contrôle. L'implémentation utilisateur ouvre le fichier et stocke les données nécessaires dans des variables de module.
  • uloading : appelée lors de l'assemblage du vecteur des charges externes à chaque étape, elle ajoute la charge utilisateur au vecteur global des charges. Le numéro de l'étape courante et le facteur de charge sont transmis comme arguments.
  • uResidual : appelée lors de l'assemblage du vecteur des résidus à chaque itération, elle ajoute la contribution de la charge utilisateur au vecteur global des résidus. Elle est appelée aussi bien lors des itérations non linéaires que lors des calculs d'équilibre.

Aucun point d'extension n'est prévu pour des conditions aux limites utilisateur (extensions utilisateur de déplacements imposés ou de conditions de contact). Si une extension utilisateur autre qu'une force externe est nécessaire, utilisez le mot-clé intégré correspondant ou une voie de loi de comportement utilisateur.

Procédure d'implémentation des sous-routines utilisateur

Pour utiliser une sous-routine utilisateur, modifiez le fichier modèle inclus dans la distribution des sources de FrontISTR, puis recompilez FrontISTR. Les sous-routines utilisateur ne peuvent pas être remplacées dans les binaires distribués ; l'utilisation d'une extension utilisateur nécessite donc un environnement permettant de compiler FrontISTR depuis les sources.

Les modèles de sous-routines utilisateur se trouvent sous fistr1/src/lib/user/, avec un fichier particulier à modifier pour chaque catégorie d'extension (voir le tableau de la Vue d'ensemble des fonctions pour les noms de fichiers). Dans leur état initial, les fichiers contiennent soit des corps de sous-routines vides, soit un exemple d'implémentation élastique linéaire ; l'utilisateur y ajoute sa propre loi de comportement ou définition de charge. Après modification du modèle, recompilez FrontISTR normalement avec CMake et exécutez l'analyse avec l'exécutable fistr1 obtenu.

Les détails tels que la signification des arguments des sous-routines, la gestion des tableaux de variables d'état et les précautions à prendre lors de la recompilation sont fournis dans les pages correspondantes du guide de codage.

Voir aussi