v3.03.131 SSLS131 – Optimisation du rayon de courbure d’une tuyauterie coudée#
Résumé:
Ce test de démonstration illustre l’utilisation du langage python dans Code_Aster .
L’objectif de ce cas-test est d’optimiser la valeur du rayon de courbure d’une tuyauterie via une boucle python. Le rayon de courbure est modifié itérativement. La valeur optimale est obtenue lorsque la contrainte maximum de Von Mises est inférieure à un seuil.
Le langage python, dans ce cas-test permetitérativement :
de modifier le fichier décrivant la géométrie du coude,
de lancer GMSH afin de mailler le coude,
de récupérer la contrainte maximum de Von Mises,
d’évaluer un critère d’arrêt des itérations,
de lancer GMSH pour effectuer un post-traitement interactif.
Ce cas-test reprend le problème du cas-test forma01f: tuyauterie coudée, constituée d’un matériau élastique linéaire, soumise à une force appliquée à son extrémité, modélisée par des éléments de coques DKT.
Remarque:
Pour avoir les fonctions interactives de visualisation, mettre interactif = 1 au début du fichier de commande.
Solution de référence#
Méthode de calcul utilisée pour la solution de référence#
La solution de référence est obtenue numériquement. Il s’agit donc uniquement d’un test de non régression.
Résultats de la modélisation#
Le valeur optimale du rayon de courbure, respectant le critère \({\sigma}_{\mathrm{mises}}<{2.10}^{9}{\mathrm{N.m}}^{-2}\) est de \(\mathrm{1.1m}\) , obtenue après 5 itérations. A chacune des itérations le rayon de courbure est augmenté de \(0.2m\) .
Itérations |
Rayons de courbure |
Contrainte max de Von Mises |
1 |
\(0.3m\) |
\(3.3315E+09N/{m}^{2}\) |
2 |
\(0.5m\) |
\(2.7647E+09N/{m}^{2}\) |
3 |
\(0.7m\) |
\(2.4256E+09N/{m}^{2}\) |
4 |
\(0.9m\) |
\(2.1727E+09N/{m}^{2}\) |
5 |
\(1.1m\) |
\(1.9670E+09N/{m}^{2}\) |
Incertitude sur la solution#
Solution de non régression.
Modélisation A#
Caractéristiques de la modélisation#
Modélisation en éléments coques (DKT).
Figure 3.1-a: géométrie et maillage du demi cylindre (RC initial)
Caractéristiques du maillage#
Le maillage est régénéré à chaque itération en raison de la modification du rayon de courbure de la géométrie. Cependant les caractéristiques topologiques du maillage sont inchangées:
1013 mailles(900 TRIA3, 110 SEG2, 3POI3)
507 nœuds.
Les groupes de mailles correspondent à:
\(\mathrm{GM30}\) surface du \(\mathrm{TUYAU}\)
\(\mathrm{GM28}\iff\) section B (effort)
\(\mathrm{GM31}\iff\) point \(\mathrm{A1}\) \((-R,0,0)\)
\(\mathrm{GM27}\iff\) section \(A\) (encastrement)
\(\mathrm{GM29}\iff \mathrm{SYMETRIE}\)
Commandes Aster#
Ce paragraphe décrit l’algorithme utilisé dans le fichier de commandes et présente les commandes Code_Aster utilisées.
Initialisation de certaines variables:
Rayon de courbure: \(\mathrm{Rc}=0.3\)
Critère de convergence: \(\mathrm{crit}=2.0E+09\) (contrainte de Von Mises cible)
On entre dans la boucle python dont le critère d’arrêt porte sur la contrainte max de Von Mises. Tant que le critère n’est pas respecté, on effectue les instructions suivantes:
Reconstruction du maillage:
on redéfinit \(\mathrm{Rc}\) dans le fichier géométrique .geo de GMSH
on lance gmsh via python pour générer le fichier de maillage .msh
Lecture du maillage (PRE_GMSH) et génération du maillage (LIRE_MAILLAGE). On utilise DEFI_GROUP pour renommer les groupes de mailles selon la correspondance:
# GM30 <=> TUYAU # GM28 <=> EFOND # GM31 <=> A1 # GM27 <=> ENCAST # GM29 <=> SYMETRIE
Définition des éléments finis utilisés (AFFE_MODELE). Les tuyaux droits et le coude sont modélisés par des éléments de coque (DKT).
Réorientations des normales aux éléments: on utilise MODI_MAILLAGE pour orienter tous les éléments de la même façon, avec une normale tournée vers l’intérieur.
Définition et affectation du matériau (DEFI_MATERIAU et AFFE_MATERIAU). Les caractéristiques mécaniques sont identiques sur toute la structure.
Boucle python d’optimisation du rayon de courbure
Affectation des caractéristiques des éléments coques (AFFE_CARA_ELEM): épaisseur, vecteur V définissant le repère de dépouillement (mot-clé ANGL_REP)
Définition des conditions aux limites et du chargement (AFFE_CHAR_MECA).
La tuyauterie est encastrée en sa base, sur tous les nœuds situés dans le plan Y=0. La tuyauterie présente un plan de symétrie \(Z=0\) .
On calcule un effort réparti \(\mathrm{FY}\) dirigé selon l’axe \(Y\) et appliquée à la section \(B\) , (l’effort réparti est tel que la résultante \(2\pi .\mathrm{RMOY.}\mathrm{FY}=\mathrm{FTOT}\) , \(\mathrm{FTOT}\) étant la force totale que l’on désire appliquer). Pour appliquer l’effort sur la section B, on utilisera FORCE_ARETE.
Résolution du problème élastique linéaire (MECA_STATIQUE).
Calcul du champ de contraintes par éléments aux nœuds pour chaque cas de charge (option “SIGM_ELNO”). Les contraintes sont calculées dans le repère local défini pour chaque élément à l’aide du vecteur \(V\) (mot clé ANG_REP précédent). Utiliser NIVE_COUCHE pour définir le niveau de calcul dans l’épaisseur.
Calcul du champ de contraintes équivalentes par éléments aux nœuds calculé à partir du champ de contrainte (option “SIEQ_ELNO”).
Calcul des champs précédents aux nœuds (options “SIGM_NOEU”, “SIEQ_NOEU”)
Impression des résultats (IMPR_RESU).
Détermination d’une table contenant les calculs de moyennes du champ de contraintes équivalentes aux nœuds.(‘POST_RELEVE_T’)
Extraction de la composante VMIS de la table précédente via python.
Test d’arrêt:
Si VMIS est supérieure à CRIT, alors on réitère avec \(\mathrm{Rc}=\mathrm{Rc}+0.2\)
Sinon on sort de la boucle python.
Résultats de la modélisation A#
Valeurs testées#
Itérations |
Rayons de courbure |
Contrainte max de Von Mises |
1 |
\(0.3m\) |
\(3.3315E+09N/{m}^{2}\) |
2 |
\(0.5m\) |
\(2.7647E+09N/{m}^{2}\) |
3 |
\(0.7m\) |
\(2.4256E+09N/{m}^{2}\) |
4 |
\(0.9m\) |
\(2.1727E+09N/{m}^{2}\) |
5 |
\(1.1m\) |
\(1.9670E+09N/{m}^{2}\) |
Synthèse des résultats#
Le rayon de courbure optimal respectant le critère : contrainte max de Von Mises inférieure à \(2.0E+09\) est de \(\mathrm{1.1m}\) . Il a été obtenu après 5 itérations, et la contrainte maximum de Von Mises trouvée est de \(1.9670E+09N/{m}^{2}\) .