
Exporter les résultats vers un fichier texte dans ANSYS APDL
Supposons que nous ayons résolu 10 cas de charge dans un grand modèle éléments finis d'une fondation d'éolienne. Notre objectif est d'extraire les contraintes verticales (sy) le long d'une ligne horizontale dans le sol, composée de plus de 100 nœuds.
Extraire ces valeurs manuellement n'est pas seulement fastidieux, c'est aussi source d'erreurs. De plus, si cette opération doit être répétée fréquemment, l'automatisation s'impose. Voyons comment y parvenir avec ANSYS APDL.
Sélection des nœuds
La ligne qui nous intéresse est située à la surface du sol, précisément à l'interface avec la fondation au niveau de la section centrale. Elle s'étend de x = -13
à x = +13
, avec des coordonnées fixes y = -3
, z = 0
.
Pour sélectionner les nœuds le long de cette ligne, nous utiliserons la commande NSEL
, qui signifie « sélection de nœuds ». Tout d'abord nous créerons un nouvel ensemble de nœuds sélectionnés avec NSEL, S
, puis nous ré-sélectionnerons des sous-ensembles de nœuds avec NSEL, R
.
ALLSEL
NSEL, S, LOC, X, -13, 13
NSEL, R, LOC, Z, 0
NSEL, R, LOC, Y, -3
Parcours des résultats
Nous allons maintenant créer un tableau bidimensionnel pour stocker les résultats. Chaque ligne contiendra les informations d'un nœud, soit 100 lignes au total. Les colonnes comprendront le numéro du nœud, la coordonnée en X, et 10 colonnes supplémentaires — une pour chaque cas de charge — soit 12 colonnes au total.
Tout d'abord, nous déclarerons le tableau RESULTATS
:
*DIM, RESULTATS, ARRAY, 100, 2+10
Nous pouvons remplir la première colonne de notre tableau RESULTATS
avec les numéros de nœuds sélectionnés en utilisant la commande *VGET
:
*VGET, RESULTATS(1, 1), NODE, , NLIST
Ensuite, nous parcourons les cas de charges et les nœuds pour récupérer les contraintes verticales.
*DO, cas_charge_i, 1, 10
SET,cas_charge_i
*DO, noeud_i, 1, 100
num_noeud = RESULTATS(noeud_i, 1)
*GET, RESULTATS(noeud_i, 2), NODE, num_noeud, LOC, X
*GET, RESULTATS(noeud_i, 2+cas_charge_i), NODE, num_noeud, S, Y
*ENDDO
*ENDDO
Une amélioration utile ici serait de définir le nombre de nœuds via un paramètre. En utilisant la commande *GET
, nous pouvons affecter le nombre de nœuds sélectionnés à une variable, automatisant ainsi davantage notre code :
*GET, nb_noeuds, NODE, , COUNT
Maintenant, nous pouvons créer le tableau de résultats en utilisant cette variable, et l'intégrer dans la boucle :
*DIM, RESULTATS, ARRAY, nb_noeuds, 2+10
*DO, cas_charge_i, 1, 10
SET,cas_charge_i
*DO, noeud_i, 1, nb_noeuds
num_noeud = RESULTATS(noeud_i, 1)
*GET, RESULTATS(noeud_i, 2), NODE, num_noeud, LOC, X
*GET, RESULTATS(noeud_i, 2+cas_charge_i), NODE, num_noeud, S, Y
*ENDDO
*ENDDO
Enregistrement d'un tableau au format texte
Une fois le tableau RESULTATS
rempli avec les informations nécessaires, il faut l'exporter dans un fichier texte. On utilise la commande *MWRITE
. Cette commande nécessite deux lignes : une pour la commande elle-même, et une pour la spécification du format.
La syntaxe de la ligne de commande :
*MWRITE, ParR, Fname, Ext, --, Label, n1, n2, n3
La seconde ligne précise le nombre de colonnes, l'espace réservé à chaque colonne (y compris le signe et le point décimal), et le nombre de décimales. Par exemple, pour définir deux colonnes avec 10 positions réservées pour des nombres à 3 décimales, on utilise :
%10.3F %10.3
Dans notre exemple, nous utiliserons des entiers sans décimales pour les numéros de nœud et des réels avec 6 décimales pour les colonnes restantes :
*MWRITE, RESULTATS(1,1), Sol_SY, txt
%10.0F %10.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F
Code complet
En combinant toutes les étapes et en ajoutant des commentaires explicatifs, on obtient notre post-traitement automatisé des contraintes dans le sol pour la fondation d'éolienne. Ci-dessous le code complet :
/POST1
nb_cas_charge=10
! Selection des noeuds
ALLSEL
NSEL, S, LOC, X, -13, 13
NSEL, R, LOC, Z, 0
NSEL, R, LOC, Y, -3
! Definition du tableau pour stocker les resultats
*GET, nb_noeuds, NODE, , COUNT
*DIM, RESULTATS, ARRAY, nb_noeuds, 2+nb_cas_charge
! Recuperer les numeros de noeuds dans la premiere colonne du tableau
*VGET, RESULTATS(1, 1), NODE, , NLIST
! Boucle sur les cas de charge
*DO, cas_charge_i, 1, nb_cas_charge
! Charger le cas de charge courant
SET,cas_charge_i
! Parcourir les noeuds
*DO, noeud_i, 1, nb_noeuds
! Lire le numero du noeud
num_noeud = RESULTATS(noeud_i, 1)
! Recuperer la coordonnee X du noeud
*GET, RESULTATS(noeud_i, 2), NODE, num_noeud, LOC, X
! Recuperer la contrainte verticale (SY) au noeud pour le cas de charge courant
*GET, RESULTATS(noeud_i, 2+cas_charge_i), NODE, num_noeud, S, Y
*ENDDO
*ENDDO
! Sauvegarder le tableau RESULTATS dans un fichier texte.
! Colonnes dans le fichier RESULTATS : num_noeud, X, SY cas de charge 1 a 10
*MWRITE, RESULTATS(1,1), Sol_SY, txt
%10.0F %10.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F %15.6F
Au passage, si vous souhaitez apprendre tous les tenants et aboutissants de l'automatisation de la modélisation et de l'analyse par éléments finis avec ANSYS APDL, nous préparons un cours qui pourrait vous intéresser. Inscrivez-vous sur la liste d'attente du cours ANSYS APDL.