Méthode des éléments finis/Langage MAPDL

Un livre de Wikilivres.

MAPDL signifie mechanical Ansys parametric design language. C'est le langage de programmation utilisé par les logiciels de calcul par éléments finis d'Ansys.

Domaine d'étude[modifier | modifier le wikicode]

Il existe deux interfaces Ansys : l'interface Classics et l'interface Workbench. Utiliser l'interface Classics implique de bien connaître le MAPDL ; or, l'objectif de ce chapitre est de donner quelques notions de MAPDL et quelques exemples pour lesquels le recours à la programmation est indispensable.

De fait, nous considérerons que l'utilisateur utilise Workbench.

Utiliser du MAPDL dans Workbench Simulation[modifier | modifier le wikicode]

Les commandes s'insèrent dans une analyse. Dans l'arborescence, il faut donc avoir créé une analyse (étape qui suit le maillage).

On sélectionne l'analyse dans l'arborescence et l'on clique avec le bouton secondaire de la souris « bouton droit » ; dans le menu contextuel qui apparaît, on choisit l'option Insertion > Commandes. On peut aussi utiliser le bouton Insérer des commandes de la barre d'outils contextuelle.

On a ainsi accès à une fenêtre d'éditeur de texte permettant d'entrer les commandes.

Syntaxe générale[modifier | modifier le wikicode]

La syntaxe générale d'une commande est :

commande, param1, param2, …

parami est le i-ème paramètre de la commande.

Les commentaires sont introduits par un point d'exclamation !

Le langage MAPDL n'est pas sensible à la casse (minuscules/capitales).

On peut omettre les dernières lettres d'une commande à condition que cela n'induise pas d'ambiguïté.

Processeurs[modifier | modifier le wikicode]

Un processeur est un programme chargé de traiter les données. Plusieurs processeurs sont utilisés lors d'une étude :

  • préprocesseur (preprocessor) : chargé de la préparation du modèle, en particulier du maillage et de la définition du cas de charge et des déplacements imposés ;
  • solveur (solution) : chargé du calcul par éléments finis ;
  • postprocesseur (postprocessor) : chargé de l'évaluation des résultats.

Par exemple, pour un problème de mécanique, le solveur calcule les déplacements aux nœuds, et le postprocesseur calcule les déformations et contraintes.

Cette notion de processeur est importante : certaines commandes ne s'exécutent que dans un processeur donné. Pour entrer dans un processeur, on utilise une commande commençant par une barre de fraction :

  • /PREP7 : préprocesseur ;
  • /SOLUTION (ou son abréviation /SOLU) : solveur ;
  • /POST1 : postprocesseur.

Structure des données[modifier | modifier le wikicode]

Structure des données d'un modèle d'éléments finis Ansys

Le modèle de calcul est formé d'une ou plusieurs pièces (parts), une pièce étant faite d'un ou plusieurs corps (bodies)[1]. Un corps est découpé en éléments finis, un élément fini comporte plusieurs nœuds, un nœud étant généralement commun à plusieurs éléments.

Un nœud est désigné par un numéro de référence (node number). Il est défini par ses coordonnées dans un repère.

Un repère est désigné par un numéro. Il existe cinq repères de base :

  • 0 : repère cartésien général, tel que défini lors de la création du modèle avec le logiciel de dessin assisté par ordinateur ;
  • 1 : repère cylindrique dont l'axe de rotation est l'axe z du repère 0 ;
  • 2 : repère sphérique ;
  • 4 : repère lié au plan de travail[2] ;
  • 5 : repère cylindrique dont l'axe de rotation est l'axe y du repère 0.

Les repères portant les numéros 11 et supérieurs sont des repères définis par l'utilisateur.

Par exemple, pour créer le nœud n°10 150 aux coordonnées (0, 0, 5 000) du repère cartésien général (numéro de référence 0) :

CSYS, 0 ! le repère 0 devient le repère actif
N, 10150, 0, 0, 5000 ! création du nœud

Concernant les coordonnées, Ansys ne travaille pas avec des unités particulières, c'est à l'utilisateur de s'assurer de leur cohérence. On peut omettre le numéro de référence du nœud, auquel cas Ansys utilise le premier numéro libre (numéro de nœud maximum + 1), par exemple

N, , 0, 0, 5000

Un élément fini est désigné par un numéro de référence. Il est défini par

  • un type d'élément ;
  • un matériau ;
  • ses nœuds, sous la forme d'une liste de numéros de référence ;
  • une liste de constante réelles dans certain cas.

Types d'éléments[modifier | modifier le wikicode]

Le type d'élément regroupe des éléments finis ayant les mêmes propriétés d'un point de vue du calcul. Concernant les types créés automatiquement, il s'agit d'éléments faisant partie d'un même corps.

Un type est désigné par un numéro de référence. Il est défini par

  • une catégorie d'élément, également appelée nom d'élément (element name),
  • un certain nombre de paramètres associés, les options clef (keyopt), qui modifient le comportement,
  • des constantes réelles si nécessaire, qui définissent le profil de l'élément — un élément plan a une épaisseur, un élément linéique a une section droite — ainsi que certaines propriétés mécaniques propres.

La catégorie d'élément désigne la forme de l'élément, le nombre de nœuds et les degrés de liberté, ainsi que les constantes réelles. Chaque nom se compose d'un préfixe, indiquant la nature de l'élément, et d'un numéro. Les préfixes utilisés en mécanique sont :

  • BEAM : poutre, élément linéaire ;
  • LINK : lien, élément linéaire ne pouvant pas fléchir ni se tordre ;
  • MASS : masse ponctuelle ;
  • PIPE : tuyau ;
  • PLANE : élément plan (tôle plane, solide mince plan) ;
  • SHELL : élément coque (tôle, solide mince) ;
  • SOLID : solide, élément volumique.

Chaque numéro est unique ; par exemple, il existe un SHELL63, mais aucun BEAM63 ni SOLID63. Ainsi, on peut abréger le nom par le numéro, par exemple écrire simplement 63.

Nous donnons ci-après quelques exemples.

La catégorie d'élément MESH200 est particulière : ce sont des éléments géométriques n'ayant aucune propriété physique (pas de masse volumique, pas de coefficient d'élasticité, pas de conductivité thermique, …). Ils servent à faire un maillage, et peuvent ensuite être convertis en autres types d'élément. Ainsi, un même maillage peut servir pour un calcul mécanique ou pour un calcul thermique.

Avec les éléments MESH200, l'option keyopt(1) détermine la forme de l'élément :

  • keyopt(1) = 0 ou 1 : poutre pour problème plan (resp. rectiligne ou courbe) ;
  • keyopt(1) = 2 ou 3 : poutre pour problème spatial (resp. rectiligne ou courbe) ;
  • keyopt(1) = 4 ou 5 : plaque triangulaire ;
  • keyopt(1) = 6 ou 7 : plaque quadrilatérale ;
  • keyopt(1) = 8 ou 9 : tétraèdre ;
  • keyopt(1) = 10 ou 11 : hexaèdre.

Pour problèmes plans[modifier | modifier le wikicode]

  • Éléments linéiques :
    • BEAM3 : poutre linéaire élastique travaillant en flexion ; les constantes réelles sont l'aire de la section droite S, le moment quadratique de flexion IGz, la hauteur de la poutre Vy, le coefficient de déformation en cisaillement, la charge massique linéique λ et la déformation initiale (précontrainte) ;
    • BEAM54 : similaire à BEAM3 mais avec une section droite dissymétrique (nécessite 18 constantes réelles) ;
    • LINK1 (obsolète, voir LINK180) : poutre linéaire à deux nœuds qui travaille en traction/compression uniaxiale uniforme uniquement (donc ne travaille ni en flexion, ni en torsion), avec deux degrés de liberté à chaque nœud (déplacements UX, UY) ; les constantes réelles sont l'aire de la section droite et la déformation initiale (précontrainte) ; par exemple pour les treillis, câbles, ressorts, …
  • éléments surfaciques :
    • PLANE42 : plaque quadrilatérale linéaire à quatre nœuds et deux degrés de liberté par nœud (déplacements UX et UY) ; la constante réelle est l'épaisseur ;
    • PLANE82 : plaque quadrilatérale quadratique à huit nœuds (sommets et milieux des côtés) et deux degrés de liberté par nœud (déplacements UX et UY) ; la constante réelle est l'épaisseur.

On peut définir des éléments « dégénérés » en fusionnant des sommets (plusieurs nœud de l'élément ont le même numéro de nœuds), par exemple des éléments triangulaires PLANE82 (il est déconseillé d'avoir un élément triangulaire linéaire).

Pour problèmes dans l'espace[modifier | modifier le wikicode]

  • Éléments ponctuels :
    • MASS21 : masse ponctuelle d'un seul nœud à six degrés de liberté (déplacements UX, UY, UZ et rotations ROTX, ROTY, ROTZ), ou moins si l'on utilise les options de symétrie (par exemple, pas de rotation pour une symétrie sphérique) ; les constantes réelles sont les masses et moments d'inertie ; est utilisé pour simuler le poids et l'inertie d'un objet non modélisé ;
  • éléments linéiques :
    • BEAM4 : poutre élastique rectiligne à deux nœuds, similaire à BEAM3 ; les constantes réelles sont l'aire de la section droite, les moments quadratiques de torsion et de flexion, les constantes de déformation en cisaillement, l'orientation (rotation de la section droite autour de l'axe de la poutre)la charge massique linéique et la déformation initiale ;
    • BEAM44 : similaire à BEAM4 mais avec une section droite dissymétrique (55 constantes réelles) ;
    • LINK180 : poutre à deux nœuds qui travaille en traction/compression uniaxiale uniforme uniquement, remplace les types LINK1 (pour problèmes plans), LINK8 et LINK10 rendus obsolètes ; le type LINK180 a des possibilités non-linéaires supplémentaires par rapport à ses prédécesseurs ;
    • PIPE16 : tube rectiligne de section circulaire admettant la flexion et la torsion (simplification de BEAM4 par symétrie) ;
  • éléments surfaciques :
    • SHELL23 : plaque quadrilatérale à quatre nœuds et six degrés de liberté par nœud (déplacements UX, UY, UZ et rotations du vecteur normal ROTX, ROTY, ROTZ), pouvant travailler en flexion ou en torsion ; les constates réelles sont l'épaisseur, la limite de cisaillement et la charge massique surfacique ;
    • SHELL63 : plaque quadrilatérale linéaire à quatre nœuds et six degrés de liberté par nœud (déplacements UX, UY, UZ et rotations du vecteur normal ROTX, ROTY, ROTZ), pouvant travailler en membrane (compression/extension dans son plan) et en flexion ; les constantes réelles sot les épaisseurs à chacun des sommets, et la charge massique surfacique ;
    • SHELL93 : plaque quadrilatérale quadratique à huit nœuds (sommets et milieux des côtés) et six degrés de liberté par nœud (déplacements UX, UY, UZ et rotations du vecteur normal ROTX, ROTY, ROTZ), similaire à SHELL63 ;
  • éléments volumiques :
    • SOLID45 : éléments hexaédrique linéaire, à huit nœuds et trois degrés de liberté par nœud (déplacements UX, UY, UZ) ;
    • SOLID92 : éléments tétraédrique quadratique, à dix nœuds (sommets et milieux des arêtes) et trois degrés de liberté par nœud (déplacements UX, UY, UZ) ;
    • SOLID95 : éléments hexaédrique quadratique, à dix-huit nœuds (sommets et milieux des arêtes) et trois degrés de liberté par nœud (déplacements UX, UY, UZ) ;

On peut définir des éléments « dégénérés » en fusionnant des sommets, par exemple :

  • élément coin (prisme à base triangulaire) SOLID45 ;
  • élément tétraédrique SOLID95 (il est déconseillé d'avoir un tétraèdre linéaire).

Exemple de création d'un élément[modifier | modifier le wikicode]

On veut modéliser une élingue en acier (matériau que nous supposons avoir le numéro 5) de section 679 mm2 (dans le jeu de constantes réelles de n°173) entre les nœuds n°4 513 et 10 150. On crée pour cela un élément de type n°250, de catégorie LINK10. Cela se fait dans le préprocesseur.

/PREP7

ET, 250, LINK10 ! crée le type d'élément 250 de catégorie LINK10
KEYOPT, 250, 3, 0 ! keyopt(3) = 0 : traction seulement
R, 173, 679, 0 ! jeu de constantes réelles n° 173 = (679, 0)
! pour link10 : (aire, déformation init)

TYPE, 250 ! le type d'elt actif est le n°250
REAL, 173 ! le jeu de constantes réelles actif est le n°173
MAT, 5 ! le matériau actif est le n°5

E, 4513, 10150 ! crée l'élément

/SOLU

Matériaux[modifier | modifier le wikicode]

Un matériau est désigné par son numéro de référence. Il est défini par ses propriétés physique : typiquement module de Young EX, masse volumique DENS, module de Poisson PRXY (Poisson's ratio), module de cisaillement GXY. On peut définir des matériaux orthotropes ou anisotropes, des comportements non linéaires, des propriétés diverses (coefficients de dilatation, de conductivité thermique, de frottement, …).

Par exemple, pour créer le matériau n°5 et définir que c'est un acier au carbone (ferritique), on utilise la commande MP dans le préprocesseur :

/PREP7

MP, EX, 5, 2.1e5 ! module de Young
MP, PRXY, 5, 0.3 ! module de Poisson
MP, GXY, 5, 8.08e4 ! module de cisaillement
MP, DENS, 5, 7.8e-6 ! masse volumique

/SOLU

Les valeurs sont des « scalaires purs », c'est à l'utilisateur de s'assurer de leur cohérence ; ici, nous avons supposé des forces en N et des longueurs en mm, donc des modules élastiques en MPa et une masse volumique en kg/mm3.

Obtenir des numéros de référence[modifier | modifier le wikicode]

Chaque entité (nœud, élément, type d'élément, matériau, jeu de constantes réelles, …) est désigné par un numéro de référence. Il est donc utile de récupérer des numéros de référence et de les mettre dans des variables, afin de pouvoir automatiser certaines tâches. Cela se fait avec la commande *GET. La syntaxe générale est :

*GET, variable, type entité, numéro d'entité, nom liste de paramètres, désignation du paramètre

où :

  • variable est le nom de la variable ;
  • type d'entité est le type d'entité auquel on s'intéresse : CDSY pour un repère (système de coordonnées), ELEM pour un élément, ETYP pour un type d'élément, MAT pour un matériau, NODE pour un nœud, …
  • numéro d'entité : si on ne s'intéresse qu'à une entité donnée ; avec 0 ou un paramètre vide, la recherche se fait parmi toutes les entités actives ;
  • nom liste de paramètres : nom de la liste de paramètres, qui varie selon le type d'entité ; NUM signifie que l'on veut un numéro de référence ;
  • désignation du paramètre : si la liste comporte plus d'un paramètre ; typiquement, avec la liste NUM, on dispose de MIN (numéro de référence le plus petit) et de MAX (" le plus grand).

Le code suivant récupère les numéros d'entités les plus élevés utilisés par le modèle :

*GET, NumCSYMax, CDSY, , NUM, MAX ! NumCSYMax = n° de repère max
*GET, NumELMax, ELEM, , NUM, MAX ! NumETMax = n° d'élément max
*GET, NumETMax, ETYP, , NUM, MAX ! NumETMax = n° de type d'élément max
*GET, NumMATMax, MAT, , NUM, MAX ! NumNODEMax = n° de matériau max
*GET, NumNODEMax, NODE, , NUM, MAX ! NumNODEMax = n° de nœud max
*GET, NumRCMax, RCON, , NUM, MAX ! NumRCMax = n° de jeu de constante réelle max

On peut ainsi reprendre l'exemple précédent, et créer des entité en étant sûr de ne pas « écraser » des entités existantes :

! Récupération des num max
*GET, NumETMax, ETYP, , NUM, MAX ! type d'élément
*GET, NumMATMax, MAT, , NUM, MAX ! matériau
*GET, NumRCMax, RCON, , NUM, MAX ! jeu de constante réelle
*GET, NumNODEMax, NODE, , NUM, MAX ! nœud

! assignation des numéros
etnum = NumETMax + 1
maternum = NumMATMax + 1 ! matnum est un paramètre possible de *get
rcnum = NumRCMax + 1
nodenum = NumNODEMax + 1

! Création du nœud
CSYS, 0 ! le repère 0 devient le repère actif
N, nodenum, 0, 0, 5000 

! Création du matériau
MAT, maternum ! le matériau actif est le n°maternum
MP, EX, , 2.1e5 ! module de Young
MP, PRXY, , 0.3 ! module de Poisson
MP, GXY, , 8.08e4 ! module de cisaillement
MP, DENS, , 7.8e-6 ! masse volumique

! Création du type d'élément
ET, etnum, LINK10 ! crée le type d'élément etnum de catégorie LINK10
KEYOPT, etnum, 3, 0 ! keyopt(3) = 0 : traction seulement
R, rcnum, 679, 0 ! jeu de constantes réelles n° rcnum = (679, 0)
! pour link10 : (aire, déformation init)

TYPE, etnum ! le type d'elt actif est le n°etnum
REAL, rcnum ! le jeu de constantes réelles actif est le n°rcnum

E, 4513, nodenum ! crée l'élément

Préfixes[modifier | modifier le wikicode]

Certaines commandes on des effets similaires mais s'appliquent à des types d'entité donné : nœuds, éléments. Le nom des commandes est alors identique excepté le préfixe :

  • ALL- : tous les types d'entités ;
  • N- : nœuds (nodes) ;
  • E- : éléments (elements) ;
  • CM- : sélection nommée (component) ; une sélection nommée est une entité morphologique — arête, surface, volume — à laquelle on associe un nom, ce qui permet de faire référence à toutes les entités de la sélection — nœuds ou éléments finis — de manière simple ; le nom ne doit répondre à certains critères :
    • 32 caractères maximum,
    • commence par une lettre,
    • ne contient que des lettres, des chiffres et des caractères de soulignement (underscore, tiret du 8) _,
    • ne correspond pas à une commande MAPDL.

Sélectionner des entités[modifier | modifier le wikicode]

certaines commandes ne s'applique qu'à certaines entités : certains nœuds, certaines, mailles par exemple. Les commandes de sélection permettent de sélectionner les entités sur lesquelles on va travailler.

Les commandes de sélection sont de la forme -SEL, le préfixe indique le type d'entité.

Le premier paramètre est un paramètre « booléen » :

  • ALL : annule toute sélection, la sélection courante comprend toutes les entités ;
  • S, ou vide : on crée une nouvelle sélection, en partant de l'ensemble des entités ;
  • A : ajoute les entités sélectionnées à la sélection déjà existante (union) ;
  • R : sélectionne les entités au sein de la sélection existante (intersection) ;
  • INVE : inverse la sélection (complémentaire).

Par exemple :

  • ALLSEL, ALL  : sélectionne toutes les entités de tous types ;
  • CMSEL : sélectionne une sélection nommée (component) ,
    • CMSEL, , nom : sélectionne la sélection nommée appelée nom,
    • CMSEL, A, nom : ajoute la sélection nommée à la sélection courante ;
  • NSEL : sélectionne les nœuds,
    • NSEL, , NODE, , nummin, nummax : sélectionne les nœuds dont les numéros vont de nummin à nummax,
    • NSEL, , NODE, , nom : sélectionne les nœuds de la sélection nommée appelée nom,
    • NSEL, , LOC, X, xmin, xmax : sélectionne les nœuds dont les abscisses vont de xmin à xmax ;
  • ESEL : sélectionne des éléments finis,
    • ESEL, , ELEM, , nummin, nummax : sélectionne les éléments dont les numéros vont de nummin à nummax,
    • ESEL, , ADJ, , num : sélectionne les éléments adjacents à l'élément numéro num,
    • ESEL, , TYPE, , num : sélectionne les éléments dont le type a le numéro num,
    • ESEL, , MAT, , num : sélectionne les éléments dont le matériau a le numéro num.

Mentionnons également NSLE : sélectionne les nœuds de la sélection courante (par exemple les nœuds de la sélection d'éléments).

Par exemple, on a créé des masses ponctuelles (catégorie MASS21) et on veut récupérer le numéro du nœud de la masse située vers l'abscisse x = 500 et l'ordonnée y = 300 :

ESEL, , ENAME, , MASS21 ! Sélectionne les éléments de catégorie MASS21
! (masses ponctuelles)
NSLE ! Sélectionne les nœuds de ces masses
NSEL, R, LOC, X, 499, 501 ! Sélectionne le nœud pour 499 <= x <= 501
NSEL, R, LOC, Y, 299, 301 ! Sélectionne le nœud pour 299 <= y <= 301
*GET, NumModeMass, NODE, 0, NUM, MAX ! met le n° de nœud dans NumModeMass
ALLSEL, ALL ! resélectionne tout

On peut par exemple utiliser ce numéro dans le code servant à modéliser l'élingue :

E, NumModeMass, nodenum ! crée l'élément

Afficher des entités[modifier | modifier le wikicode]

La commande EPLOT affiche les éléments sélectionnés (voir ci-dessus). La commande NPLOT affiche les nœuds sélectionnés.

Conditions aux limites[modifier | modifier le wikicode]

La commande DOMEGA permet d'appliquer un champ d'accélération angulaire par rapport au repère global.

UIDL[modifier | modifier le wikicode]

Le système Ansys possède un langage permettant de créer des interfaces graphiques (GUI : graphic user interface) : l'UIDL (user interface design language). Ceci dépasse le cadre du présent ouvrage, mais on pourra se reporter à une ressource dédiée, comme par exemple la page ANSYS and UIDL customization d'Ansys.

Notes et références[modifier | modifier le wikicode]

  1. une pièce réelle est souvent décomposable en plusieurs volumes simples, chaque volume simple étant un corps ; lors du maillage, les corps d'une même pièce ont un maillage coïncidant ; par contre, le maillage se fait corps par corps ce qui assure un maillage adapté si chaque corps est simple
  2. working plane, WP : c'est un plan provisoire et permettant de travailler avec un repère local sans créer de repère de manière définitive ; la notion de plan de travail n'existe que dans l'environnement Classics, dans Workbench, on crée des plans permanents